bash3.2.25とbash4.1.5で実験 参考:http://mlog.euqset.org/archives/linux-users/106994.html システム変数PIPESTATUSを使う $ (exit 1) | (exit 0) | (exit 3) | (exit 0) $ echo ${PIPESTATUS[@]} 1 0 3 0 PIPESTATUSという配列に、最後にパイプ使ったときの各コマンドの終了コードが入ってる pipefailオプションを使う $ set -o pipefail $ (exit 1) | (exit 0) | (exit 3) | (exit 0) $ echo $? 3 pipefailオプションを使うと、各コマンドで最後にゼロ以外だった終了コードが返る set -eと組み合わせて使うと、途中のコマンドがエラーだったときにもちゃんと死ぬ