この質問にはすでに回答があります :別のプロセスにパイプされているプロセスの終了ステータスを取得します
(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
から番号が付けられます 、ではありません 。