[问题]
有没有办法让管道/三通/写入组合立即写入行? ...如果可以做到,需要权衡什么?
[背景]
我的脚本将按键发送到正在运行的终端app
。
该按键会导致app
写入标记到它的日志。
日志是应用正常屏幕输出(带时间戳的行)。
日志正在通过以下方式写入| tee -a log
标记分数我想要的线路; IE。带时间戳的行前标记。
问题是当我然后立即地搜索日志(使用sed
同一脚本),它有时会返回以前的标记,即。最新的标记尚未写入日志。
我认为这是一个缓冲问题,但我对此处于未知领域。
不确定这是否重要:脚本是elisp
.终端 emacs terminal emulator
带有bash
外壳。
答案1
我想问题不tee
在于我似乎记得不缓冲或最多按行缓冲。
因此,如果问题出在您身上app
,您可以使用该实用程序修改其行为stdbuf
(除非app
对其自己的 stdout 缓冲进行修改)。您可以这样使用它:
stdbuf -o 0 app args | tee -a log
该-o 0
选项将 stdout 配置app
为无缓冲。