teeコマンドはどのように機能しますか? [閉鎖]

teeコマンドはどのように機能しますか? [閉鎖]

指示がないと思われる約3つの説明に触れた後、teeLinux初心者を対象に、このコマンドの簡単で一般的なステップバイステップ(可能な場合)の説明を依頼します。

パイプ、コマンドのstdout、またはファイルで直接使用できることはわかっていますが、コマンドが実際にこれらのタスクを実行するタスクと役に立つ時期はありません。

したがって、初心者に明確で段階的に役立つ教訓的な説明を見つけるために私が求めるものは次のとおりです。

  1. このコマンドは、コマンドの標準出力またはファイル自体とどのように機能しますか?

  2. teeなぜ通常は標準入力から読み取ると言いますか?つまり、これにより構文自体は読み込まれませんが、ls -lstdoutはセッションに印刷されます。teels -l

また、ご希望の場合は日常業務の実際の事例を共有してください。teeこれはいつ効果がありましたか?

答え1

tee私のシステムのマニュアルから:

teeユーティリティは標準入力を標準出力にコピーし、ゼロ個以上のファイルをコピーします。出力はバッファリングされません。

したがって、標準入力から読み出され、標準出力にコピーされると同時にストリームが1つ以上のファイルにコピーされる。

次のパイプラインは、teeパイプラインの最初のコマンド出力を取得し、標準出力(ターミナル)にコピーし、ファイルとファイルonetwoコピーしますthree

$ somecommand | tee one two three

teeさまざまな用途があり、そのうちの1つは、sudo出力をルート所有ファイルにリダイレクトすることと組み合わせられます。

$ somecommand | sudo tee /root/somefile >/dev/null

次はいいえこれは、リダイレクトが権限のないユーザーとして発生するために機能します(somecommandおそらく不要なルートとして実行される可能性があります)。

$ sudo somecommand >/root/somefile

一度に多数のファイルに固定行セットを追加する人工的な例(すべてのユーザーファイルの場合、拡張はユーザー名まで、拡張コマンドラインはシェルが処理するには長すぎないと仮定します)~/.profile*

$ tee -a /home/*/.profile <<'END_NEWPATH'
PATH="$PATH:/opt/bin"
END_NEWPATH

実際のユースケースtee

time doas box-build.sh 2>&1 | tee build.out |  grep '^=*>'

これが私がOpenBSD用に構築した基本システムです。doasはいOpenBSD「同等」sudobox-build.sh(本質的に)ビルド用の小さなシェルスクリプトですcd /usr/src && make obj && make build。エラーや警告を含むビルドプロセス全体の出力を保存したいのですが、すべてが私の端末にあふれたくありません。これを行うには、すべてを保存し、端末からteeプロセスの現在位置を取得するように求められます。build.outgrep

ここにタグ付けされた他の質問も参照してくださいブランド。

関連情報