Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Failed pipeline doesn't err_exit/return if complex command last



Hi all,

I noticed a strange behavior when using a complex command in a pipeline.

With `set -eo pipefail`, a failing pipeline that ends in a complex
command will have non-zero status but not exit the script (or a function
with err_return):

    false | if true; then true; fi
    echo $?

=> prints "1", exits with 0

However, this only occurs if the `if` command is last. If we add a `|
true` at the end:

    false | if true; then true; fi | true
    echo $?

=> no output, exits with 1

Same with a while loop (I only checked these 2 complex commands):

    false | while read line; do true; done
    echo $?

=> prints "1", exits with 0

    false | while read line; do true; done | true
    echo $?

=> no output, exits with 1

It seems inconsistent to me that a complex command be treated just like a simple command in the middle of a pipeline but not at the end, making a "list" that has non-zero status but doesn't return/exit despite the options.

As a sanity check, I ran the examples with bash and the result is what I would expect in all 4 cases: no output, exit with 1.

I'm using zsh 5.8.1 (x86_64-ubuntu-linux-gnu).

--
Johan Grande




Messages sorted by: Reverse Date, Date, Thread, Author