teeコマンド
- ファイルへのリダイレクトとパイプを同時に行う
- 出力するファイルは都度新規作成ではなく追記する
teeコマンド概要
tee
コマンドは、標準入力から受け取った出力を、標準出力へ出力しつつ、同時にファイルに書き出すコマンドです。
teeコマンドの書式
コマンド | tee ファイル | コマンド2
コマンド | tee ファイル1 ファイル2 ファイル3……
teeコマンドの主なオプション
オプション | 意味 |
---|---|
-a | 指定したファイルが既に存在する場合、新規にファイルを作成せずにすでに存在するファイルに追加する(リダイレクトの「»」に相当) |
teeコマンド詳細説明
ファイルへのリダイレクトとパイプを同時に行う
以下のコマンドは、画面に出力をしつつ、同じ内容を output.txtに出力しています。
$ cat /var/log/httpd/access.log | sort | uniq -c | sort -n | head -n15 | tee output.txt
出力するファイルは都度新規作成ではなく追記する
tee
コマンドは指定されたファイルを新規作成して出力内容をファイルに書き出します。-a オプションを付けることによって、append(追記)することができます。
output.txtに出力を追記する
# 予めファイルを生成しておく
$ :>output.txt
$ cat /var/log/httpd/access.log | sort | uniq -c | sort -n | head -n15 | tee -a output.txt
# 時間をおいて再度実行すると追記される
$ cat /var/log/httpd/access.log | sort | uniq -c | sort -n | head -n15 | tee -a output.txt
- ヒント
tee
コマンドの -aオプションは非常によく使います。- teeコマンドの出力をファイル書き出す場合、デフォルトは「>」と同等の処理で、-aオプションを付けることによって「»」と同様に処理となります。
- 注意
- 「»」も同様に
tee -a
の場合は、予めファイルを作成しておき、そのファイルに対して「»」やtee -a
を行います。追記する最初の処理段階でファイルが存在していることを明示的に書いておくことが重要です。 - 以下のまとめのように、追記する前に上書きする処理をしておく場合は、あらかじめファイルの生成をする必要はありませんが、明示的に「 $ :> filename 」のようにファイルを生成しておくと、ソースがわかりやすくなります。
まとめ
echo
だと以下のとおりです。ファイルには出力されるが、画面には処理内容が出力されないのでいまいち不便。
# 上書き
$ echo "文字列" > fileName
# 追記
$ echo "文字列" >> fileName
そこで、処理の出力内容が画面にも表示されるようtee
を使う
# 上書き
$ echo "文字列" | tee fileName
# 追記
$ echo "文字列" | tee -a fileName