1つのコマンドの出力を複数のコマンドにリダイレクトできますか?

1つのコマンドの出力を複数のコマンドにリダイレクトできますか?

私が知っている限り、teeコマンドを使用して標準出力を画面とは異なるファイルに分割できます。

command -option1 -option2 argument | tee file1 file2 file3 

理論的には、一連のコマンドを生成できるように、teeを使用して出力をファイルの代わりにコマンドにリダイレクトできますか?

ベストアンサー1

名前付きパイプ(http://linux.die.net/man/1/mkfifo)コマンドラインからtee名前付きパイプのコマンドを読みます。

mkfifo /tmp/data0 /tmp/data1 /tmp/data2
cmd0 < /tmp/data0 & cmd1 < /tmp/data1 & cmd2 < /tmp/data2 &
command -option1 -option2 argument | tee /tmp/data0 /tmp/data1 /tmp/data2

完了すると、command名前tee付きパイプが閉じられ、各パイプにEOF(ゼロバイト読み取り)信号が発生し、/tmp/dataN通常cmdNプロセスは終了します。実際の例:

$ mkfifo /tmp/data0 /tmp/data1 /tmp/data2
$ wc -l < /tmp/data0 & wc -w < /tmp/data1 & wc -c < /tmp/data2 &
$ tee /tmp/data0 /tmp/data1 /tmp/data2 < /etc/passwd >/dev/null
$ 61
1974
37

バックグラウンドプロセスのため、シェルはプログラムが出力される前にプロンプ​​トを返します。 3 つのインスタンスはすべてwc正常に終了しました。

おすすめ記事