パイプの前に前のコマンドから終了コードを取得する

パイプの前に前のコマンドから終了コードを取得する

私はこれを持っています:

node ${SUMAN_RUNNABLE} | tee -a run.sh.log
EXIT_CODE=$?;

しかし、teeはノード実行可能ファイルの代わりにコードを提供するため、終了コードは常にゼロに見えます。

この場合、ノード実行可能ファイルから終了コードをキャプチャする方法はありますか?

答え1

~からhttps://stackoverflow.com/a/1221870/5020949:

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

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

あるいは、他のシェル(zshなど)でも機能するもう1つの代替方法は、パイプライン障害を有効にすることです。

set -o pipefail
...

最初のオプションはいいえzsh構文が少し異なるので、これはうまくいきます。

関連情報