fstab
や/etc/apt/sources.list.d/<name>.list
などのシステムファイルへのテキストの追加に関するほとんどすべての指示に、tee
の使用が含まれているのはなぜですか?andecho
は、上記のテキストを追加しますか?
次の例を取り上げます。rootとして実行します。
## 1
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | tee -a file1
## 2
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' >> file2
diff -u file1 file2
を実行しても何も返されません。 md5sum file1 file2
を実行すると、md5sumが同一であることが示され、元の質問に戻ります。
Ubuntuのドキュメント全体で| tee <FILENAME>
が非常に普及しているのは良い習慣です。そうしないと、出力をecho
からtee
に渡すのではなく、例2を使用する方が簡単になりませんか?
違いがあります。teeは出力を複製します。ファイルとディスプレイの両方に出力を送信します。
しかし、もっとあります:
たとえば、2つのファイルに文字列を一度に書き込む場合、使用できるtee付きのコマンドは次のとおりです。
echo "some text" | tee file1 > file2
Tシャツを使用する際の1つの問題を回避することもできます。通常の出力リダイレクト演算子は、STDOUTテキストを生成するコマンドの前にSudoを書き込むときにも、常にユーザー権限で実行されます。つまり、そのファイルへの書き込み権限がない場合、これは失敗します。
Sudo echo "something" > bar
しかし、ティーでは、すべてがうまくいきます:
echo "something" | Sudo tee bar
このサイト からの2つの例。さらにいくつかあります。
まず、tee
自体はテキストを追加せず、>
も追加しません。
テキストを追加するのは、tee -a
とその補完である>>
です。
すべてのシェルが>>
関数をサポートしているとは思わないので、tee
がより一般的に使用される理由です。 (単なる古いsh
と考えてください)。 Teeはコマンドですが、>>
は演算子です。
(私の個人的なお気に入り)bash
、>
、および>>
を使用すると、より良い/簡単になります。
tee
を使用すると、Sudo sh -c "echo foo > bar"
のように、そのコマンドをSudoだけでSudoできるため、ステートメント全体をSudoする必要がありません。 tee
では、出力を分割することもできます。もちろん、これらはすべてman tee
で見ることができます。主に個人的な好みです。
tee
は、標準入力ストリームを取得し、それをboth標準出力ストリームとファイルストリームに書き込みます。覚えやすい場合は、コマンド名は配管のTスプリッターに由来します。 Nice Wikipedia article があり、コマンド名の起源について学びました。