teeはリダイレクト/追加とどう違いますか?

teeはリダイレクト/追加とどう違いますか?

stdinで作成したものをstdoutにコピーして貼り付けたい場合は、リダイレクトまたは>追加を使用できます>>

teestdinからstdoutへの書き込みの違いは何ですか?

答え1

tee入力があります二つ出力(したがって、パイプで使用されるティーコンポーネントの後に名前が付けられます)。リダイレクト用の入力を使用または>保持します。>>一つ出力。

以下を使用してtee標準入力をリダイレクトできます。両方標準出力へそして(2番目のコピー)をパラメータとして指定されたファイルにtee。リダイレクト>または>>その操作を実行できません。

たとえば、次のように入力すると:

ls -l | tee file-list

端末にディレクトリのリストが表示されます。そしてファイルにもコピーされますfile-list。しかし、入力すると

ls -l > file-list

ストアディレクトリリストただファイルにはfile-list端末に出力がありません。

答え2

この質問をする文脈が重要です。

例:

cat one_file > another_file

これにより、cat何も開きませんanother_file。シェルは別のファイルを開き、標準出力をそのファイルcatに設定します。ファイル記述子

root権限が必要なファイルに書き込もうとすると、問題が発生する可能性があります。だからこれはおそらく動作しません。

sudo echo 1 > /some/root/owned/file

上記のシェルは/some/root/owned/file実行前に開こうとしましたが、sudo権限がありません。

これが機能する場所:

echo 1 | sudo tee /some/root/owned/file

teeこれはルートとして実行されており、teeこのコンテキストでファイルが開かれるためです。殻ではない

答え3

>, >>出力をファイルとして使用することとファイルにリダイレクトすることの違いcommand | tee -a filenameは、teeモデルエラーはさまざまな方法で処理できます。ティーファイルや端末に書き込んだり追加したりできます。時々人々が使うティー端末でコマンドの出力を見てファイルに保存しようとしているので、>/>>これはできません。

関連情報