我有一个进程myProcess1
,它同时产生标准输出和标准错误输出。我想将两个输出流管道到两个不同的下游进程,myProcess2
和myProcess3
,这将对数据进行处理,然后将结果转储到两个不同的文件中。有可能用一个命令来完成吗?如果没有,第二种方法是运行两个单独的命令,一个处理stdout
,另一个处理stderr
。在这种情况下,第一次运行将是:
myProcess1 | myProcess2 > results-out.txt
处理stderr
的类似命令是什么?Thx
没有花哨的游戏,像这样的东西应该工作:
{ myProcess1 | myProcess2 > results-out.txt; } 2>&1 | myprocess3 > results-err.txt
对于高级游戏(不能在/bin/sh
等中工作),您可以这样做:
myProcess1 2> >(myprocess3 > results-err.txt) | myProcess2 > results-out.txt
使用一两个命名管道就可以了,但是您可能会发现使用多个终端窗口更容易。
在一个终端窗口中:
mknod stdout.pipe p
mknod stderr.pipe p
myProcess1 > stdout.pipe 2> stderr.pipe
在第二个窗口中:
myProcess2 < stdout.pipe
第三个:
myProcess3 < stderr.pipe
使用后台进程和一些其他技巧,你可以在一个窗口中完成所有工作,但是保持次要进程的输出分离将是另一个挑战…
您可以使用以下任何一种方法消除一个命名管道(从而消除一个额外的窗口):
myProcess1 2> stderr.pipe | myProcess2
或
{ myProcess1 > stdout.pipe; } 2>&1 | myProcess3