On 8/5/16 10:05 AM, Deniz Adrian wrote: > Hey there, > > I'm observing changed behaviour between 4.2 and 4.3:
[set -e not exiting shell if failing command is an if statement test] >> [zined bash-testing]$ cat test_works_in_4.2_breaks_in_4.3 >> #!/bin/bash >> >> set -x >> >> function test_function >> { >> set -e >> false >> return 0 >> } >> >> if eval test_function; then >> exit 0 >> else >> exit 1 >> fi > > Using the git mirror at git://git.savannah.gnu.org/bash.git, I've bisected > a bit and narrowed the change down to > http://git.savannah.gnu.org/cgit/bash.git/commit/?id=ac50fbac377e32b98d2de396f016ea81e8ee9961 That's the commit for the bash-4.3 distribution. > My gut feeling is that it's one of: > > +a. Only Posix-mode shells should exit on an assignment failure in the > + temporary environment preceding a special builtin. This is how it's > been > + documented. > + > +b. Fixed a bug that caused a failed special builtin to not exit a > posix-mode > + shell if the failing builtin was on the LHS of a && or ||. > > causing the change. It's not. > Is the observed behaviour change intended? Yes. This change was the result of a change to the Posix description of the `set -e' behavior: http://austingroupbugs.net/view.php?id=52 . This followed an extensive discussion of the desired behavior and how the previous Posix revision was not consistent with historical sh behavior. The relevant portion is 2) The -e setting shall be ignored when executing the compound list following the while, until, if, or elif reserved word, a pipeline beginning with the ! reserved word, or any command of an AND-OR list other than the last. Chet -- ``The lyf so short, the craft so long to lerne.'' - Chaucer ``Ars longa, vita brevis'' - Hippocrates Chet Ramey, UTech, CWRU c...@case.edu http://cnswww.cns.cwru.edu/~chet/