当我调用“tail -f myfile.txt”时,使用以下命令添加的新行输出新行,但不输出使用vi添加/保存的行。有谁知道为什么?
$ echo“这是新行”>> myfile.txt的
感谢。
答案 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 ...'让每个循环按名称查找文件的尾部,而不是在开始时打开的文件中查看磁盘上的位置。