Linuxの標準出力の内容を複数のプロセスに渡す
Pocket

Linuxで、標準出力の内容をそのまま複数のプロセスに渡したい時がある。
そんなときは、teeコマンドを用いると良いだろう。

コマンド | tee >(コマンド1) >(コマンド2) .... | コマンドN

もしくは

コマンド | tee >(コマンド1) >(コマンド2) ... 1 > /dev/null
Sponsored Links

これを用いる事で、以下のようにechoで出力した値に対し、複数の処理を行うことができる。
…まぁ、処理される順番は順不同なので、そこはご愛嬌ということで。

echo 1234 | tee >(sed 's/34/56/g') >(sed 's/34/78/g') | sed 's/34/90/g'

20160103_000015

[root@localhost ~]# echo 1234 | tee >(sed 's/34/56/g') >(sed 's/34/78/g') | sed 's/34/90/g'
1290
1278
1256

 

色々と使いドコロが難しい気もするけど、ファイルに書き出すのであれば(順不同だけど)うまく動作するだろう。
もしGNU parallelが使える環境であれば、そちらのほうがいいかも知れない。GNU Parallel使ったことないけど。

Pocket

Written by blacknon

インフラ系のSE。一時期はプログラマ。 仮想化とオープンソースに興味あり。一日中寝てたい今日このごろ。 スペインとかで働きたいなぁ…(シエスタがあるので)

Leave a Comment

メールアドレスが公開されることはありません。