Bashでパイプ出力と終了ステータスのキャプチャを行う 質問する

Bashでパイプ出力と終了ステータスのキャプチャを行う 質問する

Bashで長時間実行されるコマンドを実行し、その終了ステータスをキャプチャし、ティーその出力。

だから私はこうします:

command | tee out.txt
ST=$?

問題は、変数 ST がteeコマンドの終了ステータスではなく の終了ステータスをキャプチャすることです。どうすればこれを解決できますか?

コマンドは長時間実行されるため、出力をファイルにリダイレクトして後で表示することは、私にとっては良い解決策ではないことに注意してください。

ベストアンサー1

と呼ばれる内部 Bash 変数があります$PIPESTATUS。これは、最後のフォアグラウンド コマンド パイプライン内の各コマンドの終了ステータスを保持する配列です。

<command> | tee out.txt ; test ${PIPESTATUS[0]} -eq 0

または、他のシェル (zsh など) でも機能する別の方法として、pipefail を有効にする方法があります。

set -o pipefail
...

最初のオプションは、構文が少し異なるため機能しません。zsh

おすすめ記事