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



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

$echo "this is new line">> myfile.txt

谢谢。

这与以下事实有关:当您编辑文件时,vi将您的更改保存在第二个文件中(本例中为.myfile.txt.swp)。

当您保存更改时,很可能vi正在用第二个文件替换原始文件。这意味着tail正在监视的文件不再有效。

为了证明这一点,在用vi保存文件后尝试使用echo命令。当您这样做时,tail不会显示输出。

尾部程序打开一个文件,查找到末尾,然后(使用"-f")等待,然后再次检查打开的文件是否有新的内容要读取。

vi不追加到文件中。它做一个拷贝(不是"交换",这完全是另一回事),把它写出来,然后移动新文件,使其具有与旧文件相同的名称。

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

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

Run 'tail——follow=name…

让tail在每次循环时按名称查找文件,而不是在开始时查看文件在磁盘上的位置。

最新更新