On 2023-01-11 13:20, Chet Ramey wrote:
They are not all contexts where set -e is ignored. There is a distinction
between the effect of -e being ignored and the shell not exiting when a
command fails.

If you don't like the bash manual page wording, here's what POSIX says:

"1.    The failure of any individual command in a multi-command pipeline
shall not cause the shell to exit. Only the failure of the pipeline itself
shall be considered.

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.

3.    If the exit status of a compound command other than a subshell
command was the result of a failure while -e was being ignored, then -e
shall not apply to this command.

I see. I had mistakenly thought that Bash's set -e description was
definitively listing the contexts in which set -e is ignored, not just
contexts in which set -e may not have the intended effect. Really it's
POSIX that definitively lists the contexts in which set -e is ignored,
as you explain above.

The lists are almost the same, with the only difference being that Bash
also lists "any command in a pipeline but the last". This is a context
in which set -e is *not* ignored but may also not have the intended
effect, as the pipeline ignores the exit statuses of all non-last
commands (except if set -o pipefail is being used).

Thank you for clearing this up for me.

Reply via email to