我遇到了如何使用 Unix(或 Windows)中的(最好是未命名的)管道将一个进程的标准输出发送到多个进程的答案?grep
当我注意到一个奇怪的问题时,我正在玩弄。以下工作如我所料:
$ while [ 1 ]; do sleep 1 ; echo tick; done | tee >(grep -o ti) >(grep -o ic) >(grep tick) >/dev/null
ic
ti
tick
ic
tick
ti
^C
所有三个grep
命令都应用于循环的输出。
但是,如果我将 的输出通过管道tee
传输到 grep 中(而不是将其重定向到 /dev/null),grep
则文件上的 s 将停止工作:
$ while [ 1 ]; do sleep 1 ; echo tick; done | tee >(grep -o ti) >(grep -o ic) | grep tick
tick
tick
^C
为什么会这样?