stdinで作成したものをstdoutにコピーして貼り付けたい場合は、リダイレクトまたは>
追加を使用できます>>
。
tee
stdinから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
モデルエラーはさまざまな方法で処理できます。ティーファイルや端末に書き込んだり追加したりできます。時々人々が使うティー端末でコマンドの出力を見てファイルに保存しようとしているので、>/>>
これはできません。