You can set the pipefail
shell option option on to get the behavior you want.
From the Bash Reference Manual:
The exit status of a pipeline is the exit status of the last command
in the pipeline, unless the pipefail
option is enabled (see The Set Builtin).
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.
Example:
$ false | tee /dev/null ; echo $?
0
$ set -o pipefail
$ false | tee /dev/null ; echo $?
1
To restore the original pipe setting:
$ set +o pipefail