teeコマンドのデフォルト動作

teeコマンドはオプションなしで実行すると、標準入力の内容でファイルを上書きする。

$ echo "line1" > f.txt
$ echo "line2" | tee f.txt
line2
$ cat f.txt
line2

実行のたびにf.txtの内容がline2だけになり、既存のline1は消える。

-aで追記する

-aを付けると、ファイルを上書きせず末尾に追記する。

コマンド | tee -a ファイルパス
$ echo "line1" > g.txt
$ echo "line2" | tee -a g.txt
line2
$ cat g.txt
line1
line2

-aありの場合は既存のline1を残したままline2が追記される。

複数ファイルへの追記

teeコマンドには複数のファイルパスを渡せる。-aと組み合わせると、すべてのファイルに追記できる。

$ echo "x" > a.txt
$ echo "x" > b.txt
$ echo "y" | tee -a a.txt b.txt
y
$ cat a.txt
x
y
$ cat b.txt
x
y

a.txtb.txtの両方にyが追記されている。

用途

ログファイルに追記しながら画面にも出力したい場合に-aが使える。-aを付けずにteeを複数回実行すると、実行のたびにファイルが上書きされて過去の出力が失われるので注意する。