在终端中,我可以比数据到达那里更快地搜索到日志末尾

在终端中,我可以比数据到达那里更快地搜索到日志末尾

[问题]
有没有办法让管道/三通/写入组合立即写入行? ...如果可以做到,需要权衡什么?

[背景]
我的脚本将按键发送到正在运行的终端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为无缓冲。

相关内容