linux - 使用“tee”更新文件时不遵循“tail -f”
问题描述
我听这样的流:
cat /dev/ttyS4 | tee -a mylog.log
这会正确地将数据输出到 mylog.log 以及终端。我尝试在另一个终端中关注该文件:
tail -f mylog.log
这感觉不到更新。如果我运行 ls -la (查看文件的日期),尾部输出会更新。(我也可以运行 'touch myfile.log'
自从 Linux 成为我的主要环境以来已经有几年了,但我认为这应该可以在不强制一些时间进行触摸更新的情况下工作。
我使用适用于 Windows 的 Ubuntu。
解决方案
tail
,当不写入终端而是写入管道或文件时,将按块缓冲其输出。这意味着它将在缓冲区达到一定大小之前将文本输出到管道中。这种缓冲是在 gnu libc 中实现的,请参见下面的链接。
在 Linux 上,您可以使用该stdbuf
命令调整缓冲区大小和缓冲行为。例如以下命令将逐行进行尾部输出:
stdbuf -oL tail ... | tee ...
推荐阅读
- javascript - Array.every 函数并未在 Object 的所有元素上运行
- c# - 在不影响内容的情况下调整窗口大小
- google-sheets - 在 Google 表格中从姓氏中拆分名字
- node.js - 如何让我的函数仅在异步调用完成后返回 200?
- r - 为R中的每个ID按升序生成时间戳
- java - 如何以时间戳/日期时间格式在 Scala 中获取当前时间,以便将其存储在 PG 表中
- if-statement - Airtable If 语句输出 NaN
- jquery - 获取最后 4 条记录而不获取 4 条记录数据 laravel
- javascript - 这是 IE 11 中的错误吗?
- r - R ggplot 在 geom_rect 中添加注释