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

Unix tail-f没有继续输出使用vi添加的新行,unix,command,Unix,Command,当我调用“tail-f myfile.txt”时,使用以下命令添加的新行输出新行,但不是使用vi添加/保存的行。有人知道为什么吗 $echo“这是新行”>>myfile.txt 谢谢。当您编辑文件时,vi会将您的更改保存在第二个文件中(.myfile.txt.swp) 保存更改时,vi很可能正在用第二个文件替换原始文件。这意味着tail正在监视的文件不再有效 要证明这一点,请在使用vi保存文件后,尝试使用echo命令。当您这样做时,tail不会显示输出。tail程序打开一个文件,查找到底,然后(

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

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


谢谢。

当您编辑文件时,
vi
会将您的更改保存在第二个文件中(
.myfile.txt.swp

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


要证明这一点,请在使用
vi
保存文件后,尝试使用
echo
命令。当您这样做时,
tail

不会显示输出。tail程序打开一个文件,查找到底,然后(使用“-f”)等待,然后再次检查打开的文件是否有新的内容要读取

vi不会附加到文件中。它制作一个副本(而不是“交换”,这是另外一个东西)将其写出,然后移动新文件,使其与旧文件同名

tail仍在监视旧文件,而不是每次都按该文件名查找文件

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

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