Zsh Mailing List Archive
Messages sorted by:
Reverse Date,
Date,
Thread,
Author
Failed pipeline doesn't err_exit/return if complex command last
- X-seq: zsh-workers 51904
- From: Johan Grande <nahoj@xxxxxxxxx>
- To: zsh-workers@xxxxxxx
- Subject: Failed pipeline doesn't err_exit/return if complex command last
- Date: Thu, 6 Jul 2023 01:18:36 +0200
- Archived-at: <https://zsh.org/workers/51904>
- List-id: <zsh-workers.zsh.org>
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