我正在尝试捕获构建操作的所有输出,并将其发送到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,而不是集中在一起。