tee
パイプからの入力を標準出力と指定ファイルに書き出す(パイプ)
あるコマンドの出力をパイプを使って他のコマンドに渡したいが、画面にも表示したい、という場合、tee を使う。
% ls | tee sample
total 954
-rw-rw-r-- 1 user1 user1 684 Feb 26 15:11 sample1
-rw-r--r-- 1 user1 user1 422 Feb 26 10:24 sample2
% cat sample
total 954
-rw-rw-r-- 1 user1 user1 684 Feb 26 15:11 sample1
-rw-r--r-- 1 user1 user1 422 Feb 26 10:24 sample2
このように ls の出力と sample の内容は同じになる。
tee コマンドは、make コマンドの実行時に使うと便利。make コマンドは、エラーが起こったとき途中で終了せずに、そのまま make の処理を続けることがある。その場合、どこで失敗したのか画面上で確認したくても、既に画面上からスクロールしてしまっている。だからといって、
% make >& make-log (csh・tcsh の場合)
% make >make-log 2>&1 (sh・bash の場合)
と、出力をファイルにリダイレクトしてしまうと、画面上で処理過程を見ることができない。
>> 用語集
リダイレクト *
そういうときは
% make |& tee make-log (csh・tcsh の場合)
% make 2>&1 | tee make-log (sh・bash の場合)
とすると、コンパイル結果を画面で確認しつつ、ファイル make-log にコンパイルの過程を書き込むことができる。コンパイルが失敗すると、すぐに画面上で確認できる上に、make コマンド終了後にゆっくりログファイルを見て、どこで失敗したかを知ることができる。
出力ファイルを複数指定することで、2つ以上のファイルに出力することも可能。
% command | tee out-1.log out-2.log
⇒ command の出力を out-1.log と out-2.log の両方に出力する。
また、-a オプションを付けることで、ファイルに追記することができる。
% command | tee -a command.log
⇒ command.log が存在した場合、末尾に追記する。
`T' の文字の形のように、1つの流れを2つに分岐させることから tee という名前が付けられた。
>> コマンド
Tee *
>> 読み方
tee *
tee
(UNIXコマンド) [てぃー]
データの流れが T の字だから tee という名前になった。配管屋はチーズ(tees)と言うらしい。
>> コマンド
tee *