unix命令';尾部';失去期权'--行缓冲';

unix命令';尾部';失去期权'--行缓冲';,unix,streaming,tail,Unix,Streaming,Tail,随着我们的SuSE Enterprise Linux 11(现在是bash 3.2.51(1)版本)的上一次更新,“tail”命令似乎失去了流文件的选项: tail: unrecognized option '--line-buffered' 我们的尾部来自“GNU coreutils 8.12,2013年3月”。还有其他类似的解决方案吗?只要通过简单的谷歌搜索就可以看出,tail似乎没有--行缓冲选项,grep有--line buffered用于强制执行行缓冲,即使在写入非TTY时也是如此,

随着我们的SuSE Enterprise Linux 11(现在是bash 3.2.51(1)版本)的上一次更新,“tail”命令似乎失去了流文件的选项:

tail: unrecognized option '--line-buffered'

我们的尾部来自“GNU coreutils 8.12,2013年3月”。还有其他类似的解决方案吗?

只要通过简单的谷歌搜索就可以看出,
tail
似乎没有
--行缓冲
选项,
grep
--line buffered
用于强制执行行缓冲,即使在写入非TTY时也是如此,一个典型的习惯用法是:

tail -f FILE | grep --line-buffered REGEXP > output
这里,
--line buffered
的作用是防止
grep
将输出缓冲在8K块中,并强制匹配的行立即出现在输出文件中


无论输出类型如何,
tail-f
都是无缓冲的,因此它不需要与
grep
中的选项等效的
--line buffered
选项。这可以通过运行
tail-f somefile | cat
并从另一个shell向文件追加一行来验证。有人注意到,尽管它的标准输出是管道,
tail
会立即刷新新到达的行。

tail
会等待换行,但@devnull这不是我看到的。在我的系统(tail 8.13)上,
tail-f foo | cat
后跟另一个shell中的
printf xxx>>foo
立即在tail/cat输出屏幕上显示
xxx
。即使
tail
确实在等待换行,但
--行缓冲
也不会有帮助。如果我
tail-f
同时添加了几个文件,则输出不是行缓冲的,而是以并行方式追加这些文件时输入的乱码组合。例如,跟踪一些日志文件。实际上,跟踪大量文件并以行缓冲方式将其输出交给grep是一个似乎根本没有简单解决方案的问题。这一切都是因为尾部没有
--行缓冲
选项。@TommiKyntola“行缓冲”仅表示在看到新行之前,不会将输出写入发送到操作系统(使用
write(2)
)。你似乎在用一个不同的非标准的术语,意思是“不要把不完整的行从不同的文件中混合起来”。虽然这种基于行的输出一致性在跟踪多个日志文件时是非常有用的功能,但它与通常理解的行缓冲无关。@TommiKyntola很好,我现在纠正了响应中的错误声明。