teeコマンドは標準入力と標準出力とファイルに書き出すコマンドです。
teeコマンドの使い方
teeコマンドの書式は以下の通りです。
1 |
tee [オプション] [ファイル...] |
teeコマンドは指定したファイルに標準入力を書き込みます。もし指定したファイルが存在しない場合は、新規にファイルを作成し書き込みを行いますが、既に指定したファイルが存在する場合は、上書きします。
オプション
-a | 上書きではなくファイルに追記する |
-i | SIGINTシグナルを無視する |
標準出力をファイルに保存する
標準出力をファイルに保存する場合は、パイプ「|」を利用して、teeコマンドに標準入力として渡します。
1 2 3 4 |
$ echo "Hello World" | tee a.txt Hello World $ cat a.txt Hello World |
この例では、a.txtというファイルに「Hello World」が書き込まれます。
標準入力をファイルに保存する
teeコマンドを実行すると入力が求められるので、書き込みたい文字列を入力します。書き込みを終了する場合は、「Ctrl+D」を入力します。
以下は、teeコマンドを実行し「Hello World」と入力した例です。
1 2 3 4 5 |
$ tee a.txt Hello World Hello World $ cat a.txt Hello World |
改行を入力すると、入力した文字列が端末画面に表示されます。a.txtの中身を表示すると「Hello World」が書き込まれていることが確認できます。
ファイルに追記する
「-a」オプションを付けると指定したファイルが存在する場合、上書きではなく追記を行います。
1 2 3 4 5 6 7 |
$ echo "Hello World" | tee a.txt Hello World $ echo "Hello World" | tee -a a.txt Hello World $ cat a.txt Hello World Hello World |
標準エラー出力もファイルに保存する
パイプを使用した場合、標準エラー出力は指定したコマンドに渡されません。
以下の例は、pingコマンドの引数に存在しないホスト名「host999」を指定して、エラーを発生させた例です。
1 2 3 |
$ ping -c 4 host999 | tee pinglog.txt ping: unknown host host999 $ cat pinglog.txt |
catコマンドでファイルを確認しても、「ping: unknown host host999」は標準エラー出力であるためファイルには何も書き込まれていません。
標準エラー出力も保存したい場合は「2>&1」を指定することで、標準出力と標準エラー出力の両方をteeコマンドの標準入力に渡すことができます。
1 2 3 4 |
$ ping host1234 2>&1 | tee pinglog.txt ping: unknown host host1234 $ cat pinglog.txt ping: unknown host host1234 |