grepにパイプされたtail-n0-fを使用することは確かに優れたソリューションであり、実際、パイプ内の最初のプロセスは、デッドgrepプロセスに出力しようとすると停止します。
ただし、テールの最後の現在の出力の近くに表示されるテキストを探している場合、grepはすでにテールからの入力全体を(1つのブロックで)読み取っているため、テキスト出力はこれ以上ありません。 grepが終了する前にすでにパイプを読み取っているため(またはパイプバッファにすでに存在していたため)、パイプを送信する必要があるログ-少なくともこれは私の理解です。
grepで「-m1」オプションを使用すると、希望どおりの結果が得られ、一致した行の直後に入力が残るように見えますが、違いが見られなかったり、同様の機能を検索するのに役立ったりしませんでした。パイプバッファがまだtailからのすべてのテキスト出力を保持しているのではないか、またはtailが出力するものを何も残していない他の理由があるのではないかと思います。このgrep一致後のテキストを次に出力したいのは、試行したときにテールが殺されるため(まだ危険です。何らかの理由で最後の行があった場合はどうなりますか?)、呼び出し元のスクリプトに制御を戻します。 。
grepが終了したら、ログファイルの最後に何かを出力する方法が1つ見つかりました。すなわち。
tail-fログファイル| (grep -q; echo >>ログファイル)
私は(私の推測が正しい場合)これなしでパイプを機能させるためにパイプのバッファリングを少なくすることができる、または適切なパイプコンポーネントにhuponexit設定コマンドを追加することができるという理論を持っています-つまり(おそらく巻き毛の)ブラケットでヘルプ; しかし、私はログファイルに空白行を追加することを気にしませんでした、そしてそれはうまくいきました、そしてそれはより小さなテストスクリプトだけでした(それで他の処理のためにフォーマットに固執する必要がある長命のログファイルではありません)。
shopt -s huponexitは便利ですが、そのサブシェル性には役立ちます。
PSここでの私の最初の投稿は、繰り返しではなく、既存の回答へのコメントとしてそれを行いたいと思っていましたが、今はできないと思います。