tee コマンドは、標準入力からのデータを標準出力に表示するとともに、指定されたファイルにも書き込むためのコマンドです。GNU coreutils に含まれており、Linux では GNU 版が、FreeBSD では BSD 版が提供されています。基本的な動作は共通していますが、細かなオプションの違いがあります。

基本的な使い方

編集
tee [オプション] ファイル...

主なオプション(GNU coreutils版)

編集
主なオプション
オプション 説明
-a, --append 既存のファイルにデータを追記する
-i, --ignore-interrupts インタラプト信号を無視する
-p, --pipe 複数のファイルに同時に書き込む
-v, --verbose 書き込み先のファイル名を表示
-u, --unbuffered 出力をバッファリングせずに行う

標準入力を標準出力とファイルに書き込む

編集
echo "Hello, World!" | tee output.txt

標準入力("Hello, World!")を標準出力に表示し、同時に output.txt に書き込む。

ファイルに追記する

編集
echo "New Line" | tee -a output.txt

標準入力("New Line")を output.txt に追記する。

複数のファイルに同時に書き込む

編集
echo "Multiple files" | tee file1.txt file2.txt

標準入力("Multiple files")を file1.txtfile2.txt の両方に書き込む。

インタラプト信号を無視して動作する

編集
echo "Data" | tee -i output.txt

インタラプト信号を無視して output.txt に書き込む。

バッファリングせずに出力する

編集
echo "Unbuffered Output" | tee -u output.txt

標準入力("Unbuffered Output")をバッファリングせずに output.txt に書き込み、標準出力にも表示する。

FreeBSD 版との違い

編集

FreeBSD でも tee コマンドは提供されていますが、GNU coreutils 版といくつか違いがあります。

主な違い:

編集
  1. -p(複数のファイルに同時に書き込む)オプションがない
    • FreeBSD の tee には -p オプションがありません。複数のファイルに書き込むには、複数回 tee を使用するか、シェルのリダイレクトを利用する必要があります。
  2. GNU coreutils 版を FreeBSD で使う方法
    • coreutils パッケージをインストールすると gtee という名前で GNU 版の tee が使える。
    pkg install coreutils
    gtee -a output.txt  # GNU版の tee を使用
    

詳しくは、それぞれの環境で man tee を確認してください。