echoを使用するときにteeと>>の違いはありますか?

echoを使用するときにteeと>>の違いはありますか?

このタスクの違いは何ですか?

echo "hahaha" >> file1

そして

echo "hahaha" |tee -a file1

はい、保護されたファイルにはaithにも書き込めないことがわかりましたsudo echo。しかし、可能であれば書くこともできますsudo tee。ありがとうございます。

答え1

データの意味に違いはありませんファイルにecho正常に実行され、現在のユーザーがファイルを書き込める場合はtee同じです。

このteeコマンドは追加の出力も生成します。それ標準出力には、ファイルに追加するテキストも表示されます。最初のコマンドではこれは発生しません。

別の違いはファイルですいいえと書かれると、リダイレクトを含む最初のコマンドは実行されませんechoecho 会議teeファイルに書き込むと、2番目のコマンドの実行が失敗します(teeただし、端末にはまだテキストが生成されます)。

出力を生成するいくつかの長期実行プロセスを実行している場合、これは重要です。

long_running_thing >>file

long_running_thing書き込み可能でない場合は起動fileしません。

long_running_thing | tee -a file

long_running_thingこれは最後まで実行され、実行されますが、file書き込み可能でない場合、出力は保存されません(そして出力はターミナルから追加で書き込まれますtee)。

質問の終わりにヒントを与えましたが、次に注目する必要があるのは

sudo echo hello >>file

file書けないと効果はありません。現在のユーザー。リダイレクトが処理されるためです。今後コマンドが実行されます(上記を参照)。

ルートが所有するファイルに追加するには、次のようにします。

echo hello | sudo tee -a file

ここではteerootとして実行しています。 rootとして実行する必要はありませんが、echo現在のユーザーが実際にファイルを書き込むユーティリティを所有していない場合は、root(またはファイルを所有するユーザー)として実行する必要があります。

もう1つの可能性は、以下を使用することです。

sudo sh -c 'echo hello >>file'

または

echo hello | sudo sh -c 'cat >>file'

これにより、リダイレクトを使用してファイルにデータが追加されますが、この場合、リダイレクトを実行するシェルはrootとして実行されるため、制限されたアクセス許可/所有権のためにファイルを追加/作成すると失敗しません(まだ失敗する可能性があります)file。ディレクトリ名)。

答え2

Tシャツは主に出力を複数のファイルにリダイレクトするコピーコマンドを別々に呼び出す代わりに。

たとえば、

wc -l | tee -a file1.txt file2.txt file3.txt

プロセス全体ではなく、teeコマンドだけで権限を昇格できます。 >>これは、昇格された権限が開始される前に開始されます。

関連情報