標準出力とファイルへのリダイレクトを同時にする

標準出力をファイルにリダイレクトすることは日常的によくやる。

echo "test" >> test.txt

しかし、これではファイルには書き込めても何がファイルに書き込まれたかわからない。
echoコマンドでやる人はいないだろうが、
たとえば処理結果を標準出力に出す簡単なプログラムを書いた時、
ファイルにも残したいし、処理の経過を見たいということは普通にある。

そういう場合はteeコマンド
標準出力もしつつ、ファイルにも書き込みも行える。
実行したコマンドにパイプでつなげるだけで使える。

このコマンドの名前はどういう意味なんだろう。
Tの字のようにファイルと標準出力へと分岐させると言う意味なのだろうか?

※以下のサンプルで出るtest.shは何かを標準出力するシェル

上書きする場合

./test.sh | tee test.log

これは上書きパターン
リダイレクトで言えば > と同じ

 

追記する場合

./test.sh | tee -a test.log

aオプションをつける。
リダイレクトで言うところの >> とおなじ

これだけなので、非常に短い記事になったわけだけれども
もう一つ重大なやつがあった。

標準エラーも追記する

これは 2>&1 をつけてよくリダイレクトさせている

./test.sh > test.log 2>&1

この意味は、2(標準エラー)を1(標準出力)にも流すと言う意味なのだが、
2>&1 の後にパイプをつなげることができる。
標準出力にまとめた後にパイプに渡すということだ。
するとこういう形になる

./test.sh  2>&1 | tee hoge.txt

この標準出力にまとめてパイプに渡す技は他のコマンドにも使える。

スポンサードリンク

関連コンテンツ