端末では、データが到着するよりも早くログの最後まで検索できます。

端末では、データが到着するよりも早くログの最後まで検索できます。

[質問]
パイプ/ティー/書き込みの組み合わせに行をすぐに書き込む方法はありますか? ...可能であれば、トレードオフは何ですか?

[背景]
私のスクリプトは実行中の端末にキーストロークを送信しますapp
このキーを押すとapp書き込みが行われます。表示ログに。
ログはアプリケーション一般画面出力(タイムスタンプ付きの行)。
ログは次のように書き込まれます。| tee -a log

表示噴水私が欲しいライン。タイムスタンプ付きの行今後表示。

問題は私がまもなくsed同じスクリプトを使用してログを検索すると、時々古いタグが返されます。最新のタグはまだログに記録されていません。

私はこれがバッファリングの問題だと思いますが、これについては未知の領域にあります。

これが重要かどうかはわかりません。スクリプトはシェルを持つelisp.terminalです。emacs terminal emulatorbash

答え1

問題は、teeバッファリングを行っていない、または最大行単位でバッファリングしたことを覚えているようではないということです。

したがって、問題がある場合は、appこのユーティリティを使用してその動作を修正できますstdbufapp独自の標準出力バッファリングが変更されない限り)。次のように使用できます。

stdbuf -o 0 app args | tee -a log

この-o 0オプションは、stdout がバッファappリングされないように設定します。

関連情報