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