1

シェル スクリプトを 2 つのコマンドに簡略化しました。

ターミナル A (STDIN を名前付きパイプにリダイレクト):

tee -a >>pipe

ターミナル B (上で使用したパイプから読み取る):

tail -f pipe

私が理解していない結果:

  • 結果 1 :開始ティー、開始テール: 最初のターミナルへのすべての入力はバッファーに入れられ、ティー コマンドが停止された後 (ctrl-c) にのみ 2 番目に表示されます。
  • 結果 2 :ティーを開始し、テールを開始し、ティーを停止し、再びティーを開始します: 各行のみがバッファリングされます (必要な結果)。結果は、ターミナル 1 への入力の各行の最後にあるターミナル 2 に表示されます。
  • 結果 3 (価値があるため):最初にテールを開始し、次にティー: #1 と同じ結果。

また、exec コマンドと cat コマンドを使用して同様のスクリプトを作成しましたが、同じ動作を示します。

4

1 に答える 1

0

私はこれについての専門家ではありませんが、動作は単純なようです。

tail通常のテキスト ファイルに適用するとします。最後の 10 行を出力して終了します。を使用するtail -fと、最後の 10 行が出力され、ファイルが監視されます。それ以降、ファイルに追加された新しい行がそれぞれ出力されます。これは、探しているライン バッファリングです。

tail -f名前付きパイプに適用します。もう一方の端に何を入れても、ファイルの最初の内容に似ておりtail、「最後の」10行を出力できるように、最後まで辛抱強く待ちます。そのプロセスが終了すると、パイプを介して「ファイルの終わり」シンボル(それが何であるかはわかりませんが、存在することだけです)を送信し、tail出力して監視を開始します。次に、パイプに書き込む 1 つまたは複数の新しいプロセスを開始するとtail、新しい行が新しい行として取得され、出力されます。

すべての行をバッファリングして印刷したい場合は、ティーを開始および停止してポンプを準備するか、単に使用することができます

tail -n +1 -f pipe
于 2011-06-09T20:40:52.013 に答える