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
\第一線のプログラマーの行動原理を学べる!/