tail -f没有继续输出使用vi添加的新行

时间:2015-06-01 22:33:05

标签: unix command

当我调用“tail -f myfile.txt”时,使用以下命令添加的新行输出新行,但不输出使用vi添加/保存的行。有谁知道为什么?

$ echo“这是新行”>> myfile.txt的

感谢。

2 个答案:

答案 0 :(得分:2)

当您编辑文件时,vi会将您的更改保存在第二个文件中({1}}。

保存更改时,.myfile.txt.swp可能正在替换第二个文件的原始文件。这意味着vi正在观看的文件不再有效。

要证明这一点,请在使用tail保存文件后尝试echo命令。执行此操作后,vi将不会显示输出。

答案 1 :(得分:0)

tail程序打开一个文件,搜索到最后,然后(用" -f")等待,然后再次检查该打开文件是否有新的东西要读。

vi不会附加到文件中。它创建一个副本(不是" swap",这是完全不同的东西)写出来,然后将新文件移动到与旧文件相同的名称。

tail仍在观看旧文件,而不是每次都按该文件名查找文件。

另外,tail使用文件中的位置,因此如果删除10个字符并添加15个字符,则下一个循环为' tail'将发出它认为是新的5,因为它们位于占位符之后。

运行' tail --follow = name ...'让每个循环按名称查找文件的尾部,而不是在开始时打开的文件中查看磁盘上的位置。