Bash でパイプしているときの終了ステータス

Bash でパイプを使ってコマンドを実行すると 終了ステータスは、最後のコマンドの結果になります。

たとえば次のような場合

$ true | false | true

間に false (終了ステータス 1)があるのですが $? で確認すると 0 になっています。

$ true | false | true
$ echo $?
0

これは 最後の true の終了ステータスが 0 のためなのですが これでは途中にエラーがあったかどうかわかりません。

・・・と、長らく思っていたのですが、以下のサイトに方法が書いてありました。

[参考]
終了ステータス - UNIX & Linux コマンド・シェルスクリプト リファレンス

Bash の特殊変数 $PIPESTATUS に入るそうです。

$ true | false | true
$ echo ${PIPESTATUS[@]}
0 1 0

$ exit 3 | exit 12 | exit 0
$ echo ${PIPESTATUS[@]}
3 12 0

配列の形で入るので、これを使えばパイプ中のコマンドの終了ステータスも 確認することができますね。

Google サイト内検索

Amazonアソシエイト