windows - 如何在 Unix(或 Windows)中使用(最好是未命名的)管道将一个进程的标准输出发送到多个进程?

标签 windows bash unix shell pipe

我想将进程 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 特性:bashkshzsh.
- 这个答案意外地通过管道发送了输出进程替换的输出: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/

相关文章:

linux - 当 NFS 安装停止时,bash 检查目录是否存在挂起

linux - BASH - 如何使用 sed 从网站中提取 URL

c++ - 如何在最小化窗口后最大化它

windows - Perl 到 Linux 上的静态可执行文件

c++ - 在编译时为 libcurl 定义 CA 信息

bash - 无法使用期望语句将数据添加到文件 Tcl

windows - 我们可以从 Delphi 调用 native Windows API 吗?

bash - jq解析中如何使用环境变量参数

c - 使用 openssl 在 stdout RSA 公钥上打印

unix - 一个杀死长时间运行的失控程序的程序