web-dev-qa-db-ja.com

ティーを使用することに意味はありますか?

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を使用する方が簡単になりませんか?

41
Alexej Magura

違いがあります。teeは出力を複製します。ファイルとディスプレイの両方に出力を送信します。

しかし、もっとあります:

  • たとえば、2つのファイルに文字列を一度に書き込む場合、使用できるtee付きのコマンドは次のとおりです。

     echo "some text" | tee file1 > file2  
    
  • Tシャツを使用する際の1つの問題を回避することもできます。通常の出力リダイレクト演算子は、STDOUTテキストを生成するコマンドの前にSudoを書き込むときにも、常にユーザー権限で実行されます。つまり、そのファイルへの書き込み権限がない場合、これは失敗します。

     Sudo echo "something" > bar  
    

    しかし、ティーでは、すべてがうまくいきます:

    echo "something" | Sudo tee bar  
    

このサイト からの2つの例。さらにいくつかあります。

78
Rinzwind

まず、tee自体はテキストを追加せず、>も追加しません。

テキストを追加するのは、tee -aとその補完である>>です。

すべてのシェルが>>関数をサポートしているとは思わないので、teeがより一般的に使用される理由です。 (単なる古いshと考えてください)。 Teeはコマンドですが、>>は演算子です。

(私の個人的なお気に入り)bash>、および>>を使用すると、より良い/簡単になります。

teeを使用すると、Sudo sh -c "echo foo > bar"のように、そのコマンドをSudoだけでSudoできるため、ステートメント全体をSudoする必要がありません。 teeでは、出力を分割することもできます。もちろん、これらはすべてman teeで見ることができます。主に個人的な好みです。

詳細については、 here および here を参照してください。

9
Kaz Wolfe

teeは、標準入力ストリームを取得し、それをboth標準出力ストリームとファイルストリームに書き込みます。覚えやすい場合は、コマンド名は配管のTスプリッターに由来します。 Nice Wikipedia article があり、コマンド名の起源について学びました。

enter image description hereenter image description here

9
user391339