首页 > 解决方案 > 使用“tee”更新文件时不遵循“tail -f”

问题描述

我听这样的流:

cat /dev/ttyS4 | tee -a mylog.log

这会正确地将数据输出到 mylog.log 以及终端。我尝试在另一个终端中关注该文件:

tail -f mylog.log

这感觉不到更新。如果我运行 ls -la (查看文件的日期),尾部输出会更新。(我也可以运行 'touch myfile.log'

自从 Linux 成为我的主要环境以来已经有几年了,但我认为这应该可以在不强制一些时间进行触摸更新的情况下工作。

我使用适用于 Windows 的 Ubuntu。

标签: linuxbashsh

解决方案


tail,当不写入终端而是写入管道或文件时,将按块缓冲其输出。这意味着它将在缓冲区达到一定大小之前将文本输出到管道中。这种缓冲是在 gnu libc 中实现的,请参见下面的链接。

在 Linux 上,您可以使用该stdbuf命令调整缓冲区大小和缓冲行为。例如以下命令将逐行进行尾部输出:

stdbuf -oL tail ... | tee ...

推荐阅读