Редактирование текстового файла с помощью Vim не обновляет tail -f

17

Я использую, tail -f a.txtчтобы смотреть обновления на файл с именем a.txt.

Если я обновлю файл, используя что-то вроде ls -a >> a.txtвторой виртуальной консоли, изменения будут отображаться в реальном времени в первой.

Если я обновлю файл с помощью Vim во второй виртуальной консоли, изменения не будут отображаться в первой.

Я не обязательно ожидаю, что это вызовет обновление в этом окне - но почему именно это не обновляет терминал, выполняющий tail -fкоманду?

Алекс
источник
5
tail -fпроверяет наличие дополнений. tail -Fпроверяет переименования файлов.
thrig

Ответы:

31

Если вы редактируете файл с помощью vim, обычно он читает файл в память, а затем записывает новый файл. Поэтому tailтеперь он работает с устаревшей копией файла (которая остается в файловой системе до тех пор, пока tail(и любая другая программа) не прекратит ее использовать.

Вы можете заставить tailследовать имени файла (а не файла), используя:

tail -F yourfile  

Обратите внимание на верхний регистр F .

Боб Айгер
источник
1
tail -Fработает! Консоль теперь отображает сообщение типа «a.txt был заменен: следующий конец нового файла» и обновляется соответствующим образом. Благодарность!
Alex
8

Насколько я понимаю, обычно при редактировании vimвы редактируете копию файла, которая перемещается на место, когда вы записываете свои изменения на диск. Поскольку это происходит путем unlinkвставки оригинала и moveнового на место, tailновые изменения в исходном файле не отображаются.

DopeGhoti
источник