他のコマンドのパイプを使用してstderrをstdoutに送信する方法は?

他のコマンドのパイプを使用してstderrをstdoutに送信する方法は?

ビルドジョブのすべての出力をキャプチャして送信しようとしますmyprogram。一部しかキャプチャできないようです。これが私が試していることです:

make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" | myprogram &2 > 1

私も次のことを試しました。

make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" &2 > 1 | myprogram

stdout基本的に私はすべてを送り、それで何かをしたいと思います。現在は出力の一部だけをキャプチャし、残りの部分は画面に表示されます。すべてを他のプログラムにどのように転送しますか?

答え1

2つのコマンドがあるので、次のようにすることをお勧めします。

{ make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64"; } 2>&1 | myprogram

または

( make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" ) 2>&1 | myprogram

出力がパイプに渡されない場合は、シェルが両方の呼び出しの出力を1つにリダイレクトするように上記のmake clean2つのいずれかを使用する必要があります。make

答え2

すべてのコマンドのSTDERRをSTDOUTにリダイレクトする必要があります。その後、すべてをに転送できますmyprogram

( make clean 2>&1 && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64" 2>&1 ) | myprogram

答え3

(make clean && make DISABLE_ID3TAG=1 CFLAGS="-O2 -DNDEBUG -W64") 2>&1 | myprogram

答え4

myprogram の複雑さに応じて、make 操作を myprogram に渡して stdout と stderr を別々のストリームとして読み取ることもできます。

私のプログラムがどれほど複雑になりたいかによって異なります。

最大の利点は、stdoutとstderrを一緒にまとめることなく独立して処理できることです。

関連情報