我想将进程 proc1 的标准输出重定向到两个进程 proc2 和 proc3:
proc2 -> stdout
/
proc1
\
proc3 -> stdout
我试过了
proc1 | (proc2 & proc3)
但它似乎不起作用,即
echo 123 | (tr 1 a & tr 1 b)
写
b23
到标准输出而不是
a23
b23
最佳答案
编者注:
- >(…)
是 process substitution这是 一些 POSIX 兼容 shell 的非标准 shell 特性:bash
、ksh
、zsh
.
- 这个答案意外地通过管道也发送了输出进程替换的输出:echo 123 |三通 >(tr 1 a) | tr 1 b
.
- 进程替换的输出将不可预测地交错,并且,除了在 zsh
中,管道可能会在 >(...)
中的命令执行之前终止。/p>
在 unix(或 mac)中,使用 tee
command :
$ echo 123 | tee >(tr 1 a) >(tr 1 b) >/dev/null
b23
a23
通常您会使用 tee
将输出重定向到多个文件,但是使用 >(...) 您可以
重定向到另一个进程。所以,一般来说,
$ proc1 | tee >(proc2) ... >(procN-1) >(procN) >/dev/null
会做你想做的。
在 Windows 下,我不认为内置的 shell 有等价物。微软的Windows PowerShell虽然有一个 tee
命令。
关于windows - 如何在 Unix(或 Windows)中使用(最好是未命名的)管道将一个进程的标准输出发送到多个进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60942/