Bash:比 tee 更好的输出到控制台和输出文件的方法?

tmp*_*tmp 6 linux bash command-line bash-scripting

我需要显示的是定期刷新的日志。这是一个大约 10 行文本的块。我正在使用 |tee,它现在可以工作。然而,表现却不太令人满意。它等待一段时间,然后从多次刷新中输出几块文本(特别是当程序刚刚启动时,需要相当长的时间才能开始在控制台上显示任何内容,我第一次看到这个时,我以为程序挂了)。另外,它在最后一个块的中间随机断裂,因此呈现起来相当难看。

有没有办法改善这一点?(也许每次输出更少,并更频繁地在输出文件和控制台之间切换?)

更新:这是我的 bash 脚本中的内容: tail -f /var/log/syslog | egrep --line-buffered "my search string" > tmp.txt & python script.py | tee result.log

cur*_*cat 5

我认为你的问题源于管道的一个基本特征,即缓冲。

解决方法很混乱,但您应该查看像unbufferorscript或 这样的命令stdbuf

也许可以通过 tee 来停止输出缓冲,如下所示:

 your_program | stdbuf -o0 tee
Run Code Online (Sandbox Code Playgroud)

附言。我现在不在控制台,所以我无法尝试这个。

  • 我认为应该是`stdbuf -o0 your_program | stdbuf -i0 -o0 tee` 完全摆脱缓冲 (3认同)