はじめに
こんにちは!今回はteeコマンドについて解説します。
teeは標準入力を受け取って、それをファイルに保存しながら、同時に標準出力に表示するコマンドです。パイプの途中で出力を保存したい時に超便利!
複雑なパイプラインでも途中結果を確認したい時に活躍するコマンドなので、これを機にマスターしちゃいましょう!
teeコマンドとは
teeは、標準入力からデータを読み込んで、指定したファイルに書き込みながら、同時に標準出力に出力する外部コマンドです。“tee"は配管のTの形から来た命名ですね。
パイプの途中で途中結果をファイルに保存する必要がある時に重宝します。複数ファイルに同時に保存することもできます。
基本構文
|
|
パイプで標準出力を受け取り、指定したファイルに保存します。
主なオプション
| オプション | 説明 |
|---|---|
-a |
ファイルに追記(上書きしない) |
-i |
割り込み信号(SIGINT)を無視 |
-p |
割り込み信号を無視(GNU拡張) |
-u |
バッファを使わない(出力を即座に反映) |
使用例
例1: パイプの途中結果をファイルに保存
|
|
実行結果:
|
|
ファイルは保存されつつ、同時にwc -lの結果も表示されます。
例2: 複数ファイルに保存
|
|
実行結果:
|
|
3つのファイルに同時に内容を保存できます。
例3: ファイルに追記する
|
|
実行結果:
|
|
-aオプションで既存ファイルに追記します。
例4: 複数行を複数ファイルに保存
|
|
実行結果:
|
|
複数行のデータを複数ファイルに同時に保存できます。
例5: コマンドの結果とエラーを保存
|
|
実行結果:
|
|
ls の結果をファイルに保存しながら、headで先頭10行だけ表示します。
例6: パイプラインの途中で確認
|
|
実行結果:
|
|
複数のteeを組み合わせて、途中結果を複数のファイルに保存できます。
例7: /dev/nullで出力を抑制
|
|
実行結果:
|
|
標準出力を/dev/nullにリダイレクトして、ファイルだけに保存します。
例8: sudo付きでファイルに保存
|
|
実行結果:
|
|
seatでroot権限が必要なファイルに保存できます。
例9: 複数のコマンド結果を1ファイルに保存
|
|
実行結果:
|
|
複数コマンドの結果を1ファイルにまとめて保存できます。
例10: ログファイルに追記しながら処理
|
|
実行結果:
|
|
スクリプトの標準出力とエラー出力を同時にログファイルに追記します。
Tips・注意点
パイプとリダイレクトの使い分け
teeとリダイレクトは違う役割があります。
|
|
複数ファイルへの同時保存
teeは複数ファイルを指定できるので、複数回のteeより効率的です。
|
|
/dev/nullで出力を抑制
標準出力を不要な場合は/dev/nullへリダイレクトします。
|
|
実践的な使い方
ビルドログを保存しながら実行
|
|
ビルドの進行状況を見ながら、同時にログファイルに記録します。
デプロイメントプロセスのログ記録
|
|
デプロイメント結果を日付付きのログファイルに追記します。
パイプラインの途中結果を確認
|
|
複数のstepで途中結果を確認しながら処理を進めます。
まとめ
teeコマンドのポイント:
- 標準出力をファイルに保存しながら表示する基本コマンド
-aオプション: ファイルに追記(上書きしない)- 複数ファイルに同時に保存できる
- パイプラインの途中で途中結果を確認・保存できる
- リダイレクト
>と異なり、画面にも出力が表示される - よく使う組み合わせ:
command | tee output.txt、command | tee -a log.txt
パイプラインで途中結果を確認したい時はteeを使いましょう!