[質問]
パイプ/ティー/書き込みの組み合わせに行をすぐに書き込む方法はありますか? ...可能であれば、トレードオフは何ですか?
[背景]
私のスクリプトは実行中の端末にキーストロークを送信しますapp
。
このキーを押すとapp
書き込みが行われます。表示ログに。
ログはアプリケーション一般画面出力(タイムスタンプ付きの行)。
ログは次のように書き込まれます。| tee -a log
表示噴水私が欲しいライン。タイムスタンプ付きの行今後表示。
問題は私がまもなくsed
同じスクリプトを使用してログを検索すると、時々古いタグが返されます。最新のタグはまだログに記録されていません。
私はこれがバッファリングの問題だと思いますが、これについては未知の領域にあります。
これが重要かどうかはわかりません。スクリプトはシェルを持つelisp
.terminalです。emacs terminal emulator
bash
答え1
問題は、tee
バッファリングを行っていない、または最大行単位でバッファリングしたことを覚えているようではないということです。
したがって、問題がある場合は、app
このユーティリティを使用してその動作を修正できますstdbuf
(app
独自の標準出力バッファリングが変更されない限り)。次のように使用できます。
stdbuf -o 0 app args | tee -a log
この-o 0
オプションは、stdout がバッファapp
リングされないように設定します。