この質問にはすでに回答があります :別のプロセスにパイプされているプロセスの終了ステータスを取得します
(16の回答)
昨年終了しました。
Linux
(16の回答)
昨年終了しました。
次のような大量の出力を生成する長いコマンドを実行するビルドスクリプトがあります:
./compile
コンパイルパフォーマンスのトラブルシューティングを行うために、tsを使用したいと思います (moreutilsから)各出力行の前にタイムスタンプを付けます。そこで、スクリプトを次のように更新しました:
bash -c "./compile | ts '[%Y-%m-%d %H:%M:%S]'"
これは機能しますが、終了値は常にになります 、compile時のイベント 失敗します(tsのため、 エラーなしで終了します。
スクリプトを更新してcompileを返すにはどうすればよいですか。 tsの使用中のの終了コード ?
承認された回答:
Bashを使用しているので、その$PIPESTATUSを使用できます。 これは、パイプライン内のコマンドからのさまざまな終了コードを含む配列です:
bash -c './compile | ts "[%Y-%m-%d %H:%M:%S]"; exit "${PIPESTATUS[0]}"'
zsh 同様の機能がありますが、$pipestatusを使用します 代わりに配列(zshも覚えておいてください 配列には1から番号が付けられます 、ではありません 。