[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: -e does not take effects in subshell

From: Ángel González
Subject: Re: -e does not take effects in subshell
Date: Fri, 21 Aug 2015 18:48:55 +0200

On jue, 20-08-2015 a las 17:38 -0700, Linda Walsh wrote:
> 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

If you design the function, you can put an exit 0 on them, so they
never return a non-zero status.
It is completely sensible that if "echo foo > /dev/full" fails, it
behaves the same way no matter if it's /bin/echo or a builtin what is
run by "echo".

Note that Windows has a similar deviation between binaries and batch
A .bat containing:

will run foo.exe then bar.exe if there's an executable named foo.exe,
but only foo.bat will be run if it happens to be a .bat script (ie.
acts as if prefixed by exec(1) when it's a .bat). And you can't know
beforehand (even worse, someone may have installed a .bat with the same
name as a .exe in order to slightly augment it).

Treating all of them consistently is the way to go.

> ----  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 would to like to have a way to automatically set -e all functions
defined after that, but it's orthogonal to treating them as commands.


reply via email to

[Prev in Thread] Current Thread [Next in Thread]