Path: csiph.com!tncsrv06.tnetconsulting.net!news.snarked.org!news.linkpendium.com!news.linkpendium.com!panix!usenet.stanford.edu!not-for-mail From: achurch@achurch.org (Andrew Church) Newsgroups: gnu.bash.bug Subject: Re: set -e ignored in subshell if part of command list Date: Thu, 14 Nov 2019 00:59:25 +0900 Lines: 31 Approved: bug-bash@gnu.org Message-ID: References: <13040a55-507d-e072-e827-be7c33be968f@case.edu> <5dcc2873.17477@msgid.achurch.org> NNTP-Posting-Host: lists.gnu.org Content-Type: text/plain; charset=utf-8 X-Trace: usenet.stanford.edu 1573660805 1179 209.51.188.17 (13 Nov 2019 16:00:05 GMT) X-Complaints-To: action@cs.stanford.edu Cc: bug-bash@gnu.org To: chet.ramey@case.edu Envelope-to: bug-bash@gnu.org X-wmail-status: normal In-Reply-To: <13040a55-507d-e072-e827-be7c33be968f@case.edu> X-Mailer: MMail v5.51 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 60.39.233.218 X-BeenThere: bug-bash@gnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Bug reports for the GNU Bourne Again SHell List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-Mailman-Original-Message-ID: <5dcc2873.17477@msgid.achurch.org> Xref: csiph.com gnu.bash.bug:15672 >"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? 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. 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") 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. --Andrew Church http://achurch.org/