Path: csiph.com!au2pb.net!feeder.erje.net!1.eu.feeder.erje.net!nntp.club.cc.cmu.edu!169.228.66.3.MISMATCH!ihnp4.UCSD.Edu!usenet.stanford.edu!not-for-mail From: Linda Walsh Newsgroups: gnu.bash.bug Subject: Re: -e does not take effects in subshell Date: Thu, 20 Aug 2015 17:38:00 -0700 Lines: 39 Approved: bug-bash@gnu.org Message-ID: References: <20150811135056.GD4309@eeg.ccf.org> <55CC26A7.10000@redhat.com> <55D39A71.2030109@tlinx.org> <87mvxo5mme.fsf@igel.home> <55D3B22E.9040507@tlinx.org> <20150819124214.GL4309@eeg.ccf.org> <55D4FBEA.10602@tlinx.org> <55D6693F.5070003@case.edu> NNTP-Posting-Host: lists.gnu.org Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Trace: usenet.stanford.edu 1440117504 28438 208.118.235.17 (21 Aug 2015 00:38:24 GMT) X-Complaints-To: action@cs.stanford.edu Cc: Greg Wooledge , "bug-bash@gnu.org" To: chet.ramey@case.edu Envelope-to: bug-bash@gnu.org User-Agent: Thunderbird In-Reply-To: <55D6693F.5070003@case.edu> X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x (no timestamps) [generic] X-Received-From: 173.164.175.65 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: Bug reports for the GNU Bourne Again SHell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Xref: csiph.com gnu.bash.bug:11405 Chet Ramey wrote: >> The earlier spec had -e only exit a script if a *simple* (external) >> command failed. It didn't include builtins nor functions. > > This is not; builtins and functions are simple commands. --- The builtins are _complex_ binary blobs that replace external commands. Functions are a collection of many commands. They are not a single, simple statement. I remember using their return value in some cases. With the change, I couldn't run a func and have it return the value in $? (1 byte, I know) -- but about 128x as flexible as "ok"/"die" (i.e. any non-zero value triggers the behavior now, but before, it didn't). My simplistic view was that -e was there to auto-exit if an external command failed because they are "out of your control". But if I write a function -- I design the behavior. Even if I designed in a bug -- it's still "my code" that has the problem not some -_e_xternal command ---- cf. perl's option "autodie" -- you can say you want the "open builtin" to just die on errors, then for simple scripts you don't have to put extra code to handle each problem. I.e. -- it's not really something you want in production code, but I write far more throw away quick and dirty scripts than production ones. I tried to write a more complex bash script one time -- that met my expectations. W/o error testing the code was about 150 lines. With error testing and _helpful_ error messages it was over 1000. But that's the difference between quick&dirty vs. production. -e was useful for Q&D, IMO....