Linux / コマンド / tee - パイプの出力を画面とファイルに同時保存
teeは標準入力を標準出力に送りながら、同じ内容を1つ以上のファイルにも記録します。パイプの中間結果を確認しながら保存する際に便利です。
基本的に指定したファイルを上書きします。既存の記録の後に追加するには-aを使用します。通常の>リダイレクションとは異なり、パイプの後続コマンドにも入力を引き続き渡すことができます。
基本的な文法
コマンド | tee [オプション] ファイル [ファイル ...]
インストールされている実装とオプションは、配布版によって異なる場合があります。man teeで現在のシステムの説明を確認してください。
使用例
画面とファイルに同時に
出力を確認しながらファイルに保存します。
date | tee run-time.txt
既存ログの後に追加
-aはファイルの末尾に付け加えます。
date | tee -a run-time.txt
中間結果を保存しながら処理を続ける
並べ替え結果をファイルに保存しながら、画面では先頭10行を確認します。headは早めに読み取りを終えるため、通常の tee ではパイプ切断でファイル保存も途中で止まる場合があります。以下はGNU版の -p で、まだ開いている保存先への書き込みを続ける例です。対応するかを tee --help で確認してください。
sort names.txt | tee -p names.sorted | head
画面とファイルに同時に残る結果
パイプラインの中間結果を画面で確認しながらファイルにも保存するには tee を使います。
printf 'status=ok\n' | tee result.txt
画面には次が出力され、result.txt にも同じ行が記録されます。
status=ok
基本動作は対象ファイルの上書きです。既存の内容を保持して末尾に追加するには tee -a result.txt を使用してください。管理者所有のファイルに書き込むには sudo コマンド > ファイル より コマンド | sudo tee ファイル が必要な場合があります。リダイレクトは現在のシェル権限で実行されるためです。
主なオプションと形式
| オプション・形式 | 説明 |
|---|---|
-a |
既存ファイルを上書きせずに追加します。 |
-i |
割り込みシグナルSIGINT(通常はCtrl+C)を無視します。 |
-p |
GNU 実装でのパイプ書き込みエラー処理方法を調整します。 |
使用する際の注意点
通常のパイプラインの終了状態は最後のコマンドのものなので、tee の成功だけで入力元が成功したとは判断できません。Bashのスクリプトなら set -o pipefail で途中の失敗も検出できますが、ログが途中まで残る場合もあるため結果を確認します。sudo tee も入力を標準出力へコピーするので、機密情報を扱う場合は表示先にも注意してください。
よくある質問
teeは標準エラーも保存しますか?
標準入力へ来た内容だけを保存します。実行するコマンドの標準エラーも含めたい場合は、コマンド 2>&1 | tee all.log のように、そのコマンド側で標準出力へ合流させます。tee 自身のファイル書き込みエラーとは区別してください。
公式ドキュメント
オプションの正確な動作や実装ごとの違いは、teeに関する公式文書で確認できます。




