为什么tail -F -n 1 myfile.txt打印.all。更新后myfile的内容?

时间:2014-07-08 14:11:04

标签: terminal tail

我想要做的事情非常简单 - 我希望监控文件并在文件更新时将其最后一行打印到屏幕上。据我所知,

tail -F -n 1 myfile.txt

应该做到这一点。但是,我得到了奇怪的行为:使用“原始”myfile.txt,命令工作正常,只有最后一行打印到屏幕上。但是,只要我通过添加新的文本行来改变myfile.txt,就会打印myfile.txt的全部内容 - 而不仅仅是最后一行。

我之前从未使用过尾巴,我可能会在这里遇到一些非常错误的东西,但肯定不是预期的行为?我有目的地使用-F标志,所以我可以手动更改myfile.txt - 这可能是它无法正常工作的原因吗?

非常感谢帮助...... 非常感谢!

1 个答案:

答案 0 :(得分:0)

不,这就是意味着工作的方式,-n 1初始行为,只打印最后一行,但是-F跟随文件超出了这一点,并且说得很清楚:

  

随着文件的增长输出附加数据;

换句话说,它输出 all 附加到文件的数据。

如果您检查source code,您会注意到main()功能首先处理-n选项,并且仅在结束时调用tail_forever() ,其中没有提及-n提供的论据。

如果您执行:

( echo 1; echo 2; echo 3 ) >qq

在一个窗口中然后在另一个窗口中启动尾巴:

tail -F -n 1

你应该只获得3行。

如果您然后返回原始窗口并执行:

( echo 4; echo 5; echo 6 ) >>qq

你的第二个窗口应该只输出新的行(以及所有这三行)。

如果你的第二个窗口为你提供了所有六行,它就会被破坏。