ちょっとお酒も入ってる状態でシェル芸botで遊んでいた時、ふとteeで別プロセスに出力を渡す際にブレース展開を利用できないかと考えた。 teeコマンドといえば、パイプで受け付けた内容を指定したPATHのファイルと標準出力に渡してくれるコマンドで、プロセス置換を利用すれば同じ出力を別々のプロセスに渡せるのは有名でよく使われていると思うのだけど、その際にブレース展開をすることで短く書いてみようというのが今回の内容。 で、以下のようにevalをかます必要はあるけど可能なので記録として残しておく。

コマンド | eval tee ">(コマンド2 "{1..10}")" ">/dev/null...

コマンドの実行結果を、標準出力で確認しつつファイルにも出力させる場合や、複数のファイルに出力させたい事がある。 そんなときはteeコマンドを使うと便利だ。 今回は、このteeコマンドの使い方についてをまとめてみることにする。

1. 基本的な使い方

基本的には、以下の様にコマンドを実行することで、標準入力から受け付けた内容を指定したファイルと標準出力に出してくれる。

コマンド | tee ファイル
blacknon@BS-PUB-DEVELOP:~$ echo {1..5}
1 2 3 4 5
blacknon@BS-PUB-DEVELOP:~$ echo {1..5} | te...

コンソール上で、コマンドの結果を複数のファイルに出力したいことがある。 そういった場合、残念ながらbashの場合、リダイレクトだと複数のファイルへ同時に書き込むといったことは難しい。 じゃあどうすればいいのかというと、teeコマンドであれば複数ファイルを指定できるので、それで対応する。

コマンド | tee ファイル1 ファイル2 ファイル3 ...  >& /dev/null # 追記しない場合
コマンド | tee -a ファイル1 ファイル2 ファイル3 ...  >& /dev/null # 追記する場合
blacknon@BS-PUB-UBUNTU-01:~/test_dir...

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

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

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

もしくは

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

これを用いる事で、以下のようにechoで出力した値に対し、複数の処理を行うことができる。
…まぁ...