https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=224270
Bug ID: 224270 Summary: Get exit status of process that's piped to another: set -o pipefail is missing for /bin/sh Product: Base System Version: CURRENT Hardware: Any OS: Any Status: New Severity: Affects Only Me Priority: --- Component: bin Assignee: freebsd-bugs@FreeBSD.org Reporter: wo...@freebsd.org The bash, zsh and ksh have a nice feature to detect a non-zero status in a pipe: from the bash(1) manual page: The return status of a pipeline is the exit status of the last command, unless the pipefail option is enabled. If pipefail is enabled, the pipeline's return status is the value of the last (rightmost) command to exit with a non-zero status, or zero if all commands exit successfully. $ bash -c 'set -o pipefail; false | true; echo $?' 1 $ ksh93 -c 'set -o pipefail; false | true; echo $?' 1 $ zsh -c 'set -o pipefail; false | true; echo $?' 1 However, this feature is missing in /bin/sh: $ sh -c 'set -o pipefail; false | true; echo $?' set: Illegal option -o pipefail $ sh -c 'false | true; echo $?' 0 There are workaround for shell which don’t check the pipe status, as described in https://unix.stackexchange.com/questions/14270/get-exit-status-of-process-thats-piped-to-another (((((exec 3>&- 4>&-; someprog); echo $? >&3) | filter >&4) 3>&1) | (read xs; exit $xs)) 4>&1 but this looks bizarre and you have to do it for every command in the pipe line. I really wish that we have the 'set -o pipefail' option setting in FreeBSD /bin/sh too. -- You are receiving this mail because: You are the assignee for the bug. _______________________________________________ freebsd-bugs@freebsd.org mailing list https://lists.freebsd.org/mailman/listinfo/freebsd-bugs To unsubscribe, send any mail to "freebsd-bugs-unsubscr...@freebsd.org"