为什么“ tail -f ... | tail”无法产生任何输出?

托米

为什么以下命令不产生任何输出?

$ tail -f /etc/passwd | tail

阅读有关缓冲的内容后,我尝试了以下操作,但无济于事:

$ tail -f /etc/passwd | stdbuf -oL tail

请注意,以下内容确实会产生输出:

$ tail /etc/passwd | tail

这样做是这样的:

$ tail -f /etc/passwd | head

我正在使用尾部版本8.21(GNU coreutils)。

主教

tail显示最后的X行。tail -f这样做是一样的,但本质上是无限循环的:在启动时,显示文件的最后X行,然后使用一些OS魔术(如inotify),监视并显示新行。

要执行其工作,tail必须能够找到文件的末尾。如果tail找不到文件的末尾,则无法显示最后X行,因为“ last”是未定义的。那么tail在这种情况下该怎么办?等待直到找到文件结尾。

考虑一下:

$ chatter() { while :; do date; sleep 1; done; }
$ chatter | tail -f

这似乎从未取得进展,因为from永远不会有明确的文件结尾chatter

如果您要求tail提供文件系统管道的最后几行,则会得到相同的行为考虑:

$ mkfifo test.pipe
$ tail test.pipe

stdbuf解决这个问题是一种崇高的尝试。但是关键事实是I / O缓冲不是根本原因:缺少明确的文件结尾是。如果您查看tail.c源代码,您将看到file_lines 函数注释显示为:

END_POS是EOF的文件偏移量(比最后一个字节的偏移量大1)。

这就是魔术。您需要文件尾才能在任何配置中使用tail。head没有该限制,它只需要一个文件开始(它可能没有,请尝试head test.pipe)。面向流的工具(例如,sed并且awk不需要文件的开头或结尾):它们在缓冲区上工作。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么在ArrayBuffer上调用“ tail”需要线性时间?

来自分类Dev

用Capistrano 3执行'tail -f'不会将任何内容输入输出

来自分类Dev

用Python复制“ tail -f”

来自分类Dev

实时修改`tail -f`输出

来自分类Dev

使用tail -f命令分页

来自分类Dev

为什么我在使用->运算符重定向了文件-tail -f后会有不一致的行为?

来自分类Dev

如何批量处理和处理tail -f输出?

来自分类Dev

为什么我的awk脚本比head + tail脚本慢得多?

来自分类Dev

grep和tail -f?

来自分类Dev

运行`tail -F $ file`然后删除输出行

来自分类Dev

如何让tail -f显示彩色输出

来自分类Dev

为什么tail -f对于proc文件不起作用?

来自分类Dev

“ tail -f”和“ tail -F”有什么区别?

来自分类Dev

“ tail -f | iconv -fsjis”不输出任何内容

来自分类Dev

使用tail -f命令分页

来自分类Dev

使用tail -f命令分页

来自分类Dev

为什么不`tail -f…| grep -q…`找到匹配项后退出吗?

来自分类Dev

“ tail -f”有什么作用?

来自分类Dev

tail -f在Ubuntu live CD中不产生任何输出

来自分类Dev

为什么实时运行时`tail -f`不遵循我的系统日志?

来自分类Dev

为什么用管道将“ mysql”拖尾到“ tail”会改变输出格式?

来自分类Dev

`tail -f`直到看到文本

来自分类Dev

使用“ tcpdump -r”的“ tail -f”

来自分类Dev

为什么我不能`tail -f / proc / $ pid / fd / 1`?

来自分类Dev

Java进程执行“ tail -f test.log | grep abc”无法获得任何输出

来自分类Dev

为什么xargs不能与tail -f一起使用?

来自分类Dev

无法通过`tail -f`查看文件的进度

来自分类Dev

windows powershell中tail -f的等价物是什么?

来自分类Dev

完全以类似于tail -f的跟随模式输出大文件

Related 相关文章

热门标签

归档