用Vim编辑文本文件不会更新tai​​l -f


17

我一直tail -f a.txt在观看名为的文件的更新a.txt

如果我ls -a >> a.txt在第二个虚拟控制台中使用类似的方式更新文件,则更改将在第一个虚拟控制台中实时显示。

如果我在第二个虚拟控制台中使用Vim更新文件,则更改将不会显示在第一个虚拟控制台中。

我不一定希望它会触发该窗口中的更新-但是为什么这不更新运行tail -f命令的终端呢?


5
tail -f检查追加。tail -F检查文件重命名。
thrig

Answers:


31

如果使用来编辑文件vim,通常它将文件读入内存,然后写入新文件。因此tail,现在正在对文件的过时副本进行操作(该副本将保留在文件系统中,直到tail(和任何其他程序)停止使用它为止。

您可以使用tail以下命令使文件名(而不是文件)跟随:

tail -F yourfile  

注意大写 F


1
tail -F作品!控制台现在显示类似“ a.txt已被替换:新文件结束”之类的消息,并进行相应更新。谢谢!
Alex

8

我的理解是,通常在使用进行编辑时vim,您正在编辑文件的副本,当您将更改写入磁盘时,该副本将被移动到位。由于这是通过unlink读取原始文件并将move其放置到位而发生的,因此tail不会看到对原始文件的新更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.