出力を別のプロセスにパイプしながら、最初のプロセスのエラー状態を維持する方法は? [コピー]

出力を別のプロセスにパイプしながら、最初のプロセスのエラー状態を維持する方法は? [コピー]

重複の可能性:
別のプロセスにパイプされた終了コードを取得する

私は、次のコマンドライン(makefileから)を使用して、人間が読める内容に減らすPerlスクリプトを介してコンパイラの詳細なエラーメッセージを渡します。

g++ -c source.cpp -o source.o 2>&1 | perl /bin/gSTLFilt.pl

残念ながら、このアプローチはコマンドから返されたエラー値を「マスク」しますg++。 makeはコマンドのエラー結果g++のみを返すので、コマンドが失敗したことを知りません。perl

出力をパイプして元のエラー状態を維持する方法はありますか?

違いがある場合:私はGNU bashバージョン2.04.0(1)-リリース(i686-pc-)を実行しているMSYSコンソールでGNU Make 3.81とg ++(GCC)3.4.5(mingw-vistaspecial r3)を使用しています。 msys)(Windows XP)。

ベストアンサー1

sh.exeWindows実行可能ファイルにその名前を使用する複数のシェルがあるため、シェルが何を提供しているのかわかりませんが、bash似ているか似ている場合は配列を使用できます$PIPESTATUS。あなたの例は次のようにすることができます:

g++ -c source.cpp -o source.o 2>&1 | perl /bin/gSTLFilt.pl
echo "${PIPESTATUS[0]}"

おすすめ記事