如何使用管道将 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

由于您有两个命令,因此最好使用:

{ 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

make clean没有将其输出定向到管道,您将需要使用上面两个中的任何一个来让 shell 将两个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 op 传递给 myprogram,其中您将 stdout 和 stderr 作为单独的流读取。

这取决于你想让我的程序有多复杂。

主要优点是能够独立处理 stdout 和 stderr,而不是集中在一起。

相关内容