tee 標準入力を、画面とファイルの両方に書き出す
tee [オプション] [ファイル...]試してみる
echo hello | tee out.txthello を画面に表示しながら、out.txt にも書き込みます。
cat out.txtファイルにも同じ内容が書かれています。
echo again | tee -a out.txt-a で、ファイルを上書きせず、末尾に追記します。
grep GET access.log | tee get.log | wc -l途中の結果をファイルに保存しつつ、そのまま次のコマンドへ渡します。
echo one | tee a.txt b.txt複数のファイルへ同時に書き込めます。
echo 'data' | sudo tee /tmp/root-owned.txtsudo と組み合わせると、管理者権限でファイルに書き込めます。
主なオプション
-a | ファイルを上書きせず追記する |
|---|---|
-i | 割り込みシグナル(SIGINT)を無視する |
解説
基本
tee は、標準入力から受け取った内容を、標準出力とファイルの両方に書きます。名前は、配管のT字継手に由来します。パイプの途中に挟んで、流れているデータを、その場で保存できます。
リダイレクトとの違い
> でリダイレクトすると、内容はファイルに行き、画面には何も出ません。tee は、画面に表示しながら保存します。長い処理の途中経過を残したいときに便利です。
追記
既定では、ファイルを上書きします。-a を付けると、末尾に追記します。
sudo と一緒に使う
sudo echo 設定 > /etc/foo は失敗することがあります。リダイレクトを行うのは、sudo ではなく、元のシェルだからです。echo 設定 | sudo tee /etc/foo なら、書き込みを tee がするので、権限が足ります。このとき tee は標準出力にも同じ内容を出すので、不要なら > /dev/null を付けます。
注意
tee はファイルを開くとき、まず中身を空にします。読み込み元と同じファイルに書くと、内容が消えます。