終了状態を別のプロセスにパイプにインポートする

終了状態を別のプロセスにパイプにインポートする

パイプを介して接続された2つのプロセスfooがあります。bar

$ foo | bar

bar常に0で終了します。終了コードに興味がありますfoo。それを得る方法はありますか?

ベストアンサー1

bashまた、zshシェルが実行した最後のパイプラインの各要素(コマンド)の終了状態を保持する配列変数があります。

を使用すると、配列がbash呼び出されPIPESTATUS(大文字と小文字が区別されます)、配列インデックスは0から始まります。

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

を使用すると、配列がzsh呼び出されpipestatus(大文字と小文字が区別されます)、配列インデックスは1から始まります。

$ false | true
$ echo "${pipestatus[1]} ${pipestatus[2]}"
1 0

値を失うことなく関数から結合するには、次のようにします。

$ false | true
$ retval_bash="${PIPESTATUS[0]}" retval_zsh="${pipestatus[1]}" retval_final=$?
$ echo $retval_bash $retval_zsh $retval_final
1 0

bash上記のコードを or で実行すると、and の 1 つだけをzsh設定すると同じ結果が得られますretval_bashretval_zshもう一つは空です。これにより、関数は次のようになりますreturn $retval_bash $retval_zsh(引用符がないことに注意してください!)。

おすすめ記事