Terminal 为什么tail-F-n1myfile.txt打印.all。myfile更新时的内容?

Terminal 为什么tail-F-n1myfile.txt打印.all。myfile更新时的内容?,terminal,tail,Terminal,Tail,我想做的很简单——我想监视一个文件,并在文件更新时将其最后一行打印到屏幕上。据我所知 tail -F -n 1 myfile.txt 我们应该做到这一点。然而,我得到了奇怪的行为:对于原始的myfile.txt,命令工作正常,只有最后一行被打印到屏幕上。然而,只要我通过添加新的文本行来修改myfile.txt,myfile.txt的全部内容就会被打印出来,而不仅仅是最后一行 我以前从未使用过tail,我可能在这里出了严重的问题,但这肯定不是预期的行为吗?我故意使用-F标志,以便手动更改myfi

我想做的很简单——我想监视一个文件,并在文件更新时将其最后一行打印到屏幕上。据我所知

tail -F -n 1 myfile.txt
我们应该做到这一点。然而,我得到了奇怪的行为:对于原始的myfile.txt,命令工作正常,只有最后一行被打印到屏幕上。然而,只要我通过添加新的文本行来修改myfile.txt,myfile.txt的全部内容就会被打印出来,而不仅仅是最后一行

我以前从未使用过tail,我可能在这里出了严重的问题,但这肯定不是预期的行为吗?我故意使用-F标志,以便手动更改myfile.txt,这可能是它无法工作的原因吗

非常感谢你的帮助。。。 非常感谢

不,这就是它的工作方式,-n1是初始行为,只打印最后一行,但是-F在文件后面超出该点,并且非常清楚地说明:

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

换句话说,它输出所有附加到文件中的数据

如果检查,您会注意到main函数首先处理-n选项,只有在最后,它才会永远调用tail_,其中没有提到与-n一起提供的参数

如果您执行:

( echo 1; echo 2; echo 3 ) >qq
在一个窗口中,然后在另一个窗口中启动尾部:

tail -F -n 1
你应该只得到3的那条线

如果随后返回到原始窗口并执行:

( echo 4; echo 5; echo 6 ) >>qq
第二个窗口应该只输出新行和所有三行


如果你的第二个窗口显示了所有六行,那么它就坏了。

谢谢!很抱歉让人恼火,但输出附加数据对我来说似乎只应该输出新的行,而不是文件的全部内容,包括最初存在的那些行?@yay:是的,这就是它所做的,至少对我来说是这样。有关要运行的测试用例,请参阅更新。