Unix(またはWindows)で(できれば名前のない)パイプを使用して、1つのプロセスの標準出力を複数のプロセスに送信するにはどうすればよいですか?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
3 つのコマンドはすべてgrep
、ループの出力に適用されます。
ただし、出力をtee
(/dev/null にリダイレクトするのではなく) grepにパイプするgrep
と、ファイルの s が機能しなくなります。
$ while [ 1 ]; do sleep 1 ; echo tick; done | tee >(grep -o ti) >(grep -o ic) | grep tick
tick
tick
^C
なぜこれが起こるのですか?