本を読む

読書やコンピュータなどに関するメモ

シェルのパイプラインで、コマンドのエラーを反映する

 コメントしたので、改めてメモ。

 シェルのパイプラインでは、終了ステータスは最後(右端)のコマンドのものになる。

$ (exit 1); echo $?
1
$ (exit 1 | tee /dev/null); echo $?
0

 bash 3.0以降であれば、pipefailオプションをオンにすると、エラー(0以外の終了ステータス)を返した最後(右端)のコマンドの終了ステータスになる。

$ (set -o pipefail; exit 1 | tee /dev/null); echo $?
1

 ただし、たとえばUbuntuでは/bin/shが標準でdashだし、FreeBSDも/bin/shがbashではないので、注意。

コメント

コメントの投稿

管理者にだけ表示を許可する

トラックバック

http://emasaka.blog65.fc2.com/tb.php/676-faea6fc9

 | HOME | 

Categories

Recent Entries

Recent Comments

Recent Trackbacks

Appendix

emasaka

emasaka

フリーター。
連絡先はこのへん

Monthly


FC2Ad