当我调用"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…