Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > gnu.bash.bug > #15675

Re: set -e ignored in subshell if part of command list

From Chet Ramey <chet.ramey@case.edu>
Newsgroups gnu.bash.bug
Subject Re: set -e ignored in subshell if part of command list
Date 2019-11-13 11:43 -0500
Message-ID <mailman.1354.1573663447.13325.bug-bash@gnu.org> (permalink)
References <5dcc2873.17477@msgid.achurch.org> <d02091b8-ad1b-4ea1-053d-a51e5f34335a@case.edu>

Show all headers | View raw


On 11/13/19 10:59 AM, Andrew Church wrote:
>> "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."
>>
>> (from
>> https://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_25_03)
>>
>> The subshell inherits this state (being part of an and-or list) from its
>> parent.
> 
> Is that really the intent of the requirement, though?

Yes.

> The same section
> states: "This requirement applies to the shell environment and each
> subshell environment separately", which I read to mean that the rules
> should be evaluated without consideration of any parent or subshell
> environment other than the one in which the -e option is being applied.

Not quite. It means that the reasons a subshell (for instance) exits may
not be the same ones applied to the parent.

> And the example:
> 
> set -e; (false; echo one) | cat; echo two
> 
> shows rule 1 ("The failure of any individual command in a multi-command
> pipeline shall not cause the shell to exit") 

OK. The "individual command" in this context is the subshell command. The
subshell command exits with a non-zero status, but that doesn't cause the
shell to exit. The -e setting isn't ignored in the subshell because it's 
not in an and-or list.

> not being applied within
> the subshell, even though the subshell as a whole is an "individual
> command in a multi-command pipeline".  I don't see any suggestion that
> the case of an AND-OR list in rule 2 should be treated differently, and
> absent an explicit requirement one way or the other, I think the
> expected behavior here would be that the behavior of the subshell is
> independent of the subshell's context in the parent shell.

The "-e setting shall be ignored" part? Expectations aside, that's just not
how shells behave, and not the intent of the standard. This was discussed
pretty thoroughly back in 2009, and shell behavior reflects the consensus
from that discussion. As I said in another message, there was a proposal
for some stronger language ("-e is disabled and cannot be re-enabled when
executing...any command of an AND-OR list except the last" is another
version of the proposed language) but that was deemed unnecessary.

The relevant interpretation was http://austingroupbugs.net/view.php?id=52
but there's not much discussion there -- it was all on the mailing list.

-- 
``The lyf so short, the craft so long to lerne.'' - Chaucer
		 ``Ars longa, vita brevis'' - Hippocrates
Chet Ramey, UTech, CWRU    chet@case.edu    http://tiswww.cwru.edu/~chet/

Back to gnu.bash.bug | Previous | Next | Find similar | Unroll thread


Thread

Re: set -e ignored in subshell if part of command list Chet Ramey <chet.ramey@case.edu> - 2019-11-13 11:43 -0500

csiph-web