teeコマンド

teeコマンドで以下のように標準出力をファイルに出力できる。

コマンド | tee ファイルパス

上記コマンドでは標準エラーに出力された内容はファイルに出力されない。

$ ls missing_file | tee ls.log
ls: missing_file: No such file or directory

$ cat ls.log

上記では存在しないファイル(missing_file)をlsしてエラーメッセージが出ているが、teeコマンドの出力先(ls.log)には出力されていない。

teeコマンドで標準エラー出力も含めてファイルに出力する

teeコマンドで標準エラー出力も含めてファイルに出力するにはパイプ(|)の代わりに|&を使う。

コマンド |& tee ファイルパス

先述のlsの例では以下のようになる。

$ ls missing_file |& tee ls.log
ls: missing_file: No such file or directory

$ cat ls.log
ls: missing_file: No such file or directory

|&を使うと標準エラーも含めてパイプできるため、teeコマンドの出力先(ls.log)にもエラーメッセージも出力されている。

古いシェルで|&が使えない場合

古いシェルでは|&を使えない場合がある。
その場合はもとのコマンドの標準エラーを標準出力にリダイレクト(2>&1)してからteeコマンドを実行する。

コマンド 2>&1 | tee ファイルパス

先述のlsの例では以下のようになる。

$ ls missing_file 2>&1 | tee ls.log
ls: missing_file: No such file or directory

$ cat ls.log
ls: missing_file: No such file or directory