首页 > 解决方案 > 仅对命令发球,而不是标准输出

问题描述

我已经知道如何使用tee进程替换将输出发送到各种命令标准输出,例如

command0 | tee >(command1) >(command2)

对于上面的行,stdout 将由来自command0command1和的交错行组成command2

有没有办法阻止 tee 写入标准输出,而不删除它管道到的任何命令的输出?因此,对于上面的示例,stdout 仅具有来自command1and的输出command2?大多数与tee没有标准输出的 ing 相关的答案只是直接写入文件,并建议使用如下内容:

command0 | tee file1 file2 >/dev/null

但是使用进程替换,这也会消耗其他命令的所有输出。

command0 | tee >(command1) >(command2) >/dev/null

有没有办法告诉tee不要打印到标准输出,或者只直接使用输出tee

标签: bashtee

解决方案


尝试这个:

( command0 | tee >(command1 1>&3 ) | command2 ) 3>&1

它将 command1 的标准输出重定向到管道 3,因此 command2 只能看到原始源。最后,您再次将管道 3 重定向到标准输出。

使用它来测试它:

( echo test | tee >( sed 's/^/1 /' >&3 )  | sed 's/^/2 /' ) 3>&1

输出是无序的,在我的例子中:

2 test
1 test

推荐阅读