Я использую, tail -f a.txt
чтобы смотреть обновления на файл с именем a.txt
.
Если я обновлю файл, используя что-то вроде ls -a >> a.txt
второй виртуальной консоли, изменения будут отображаться в реальном времени в первой.
Если я обновлю файл с помощью Vim во второй виртуальной консоли, изменения не будут отображаться в первой.
Я не обязательно ожидаю, что это вызовет обновление в этом окне - но почему именно это не обновляет терминал, выполняющий tail -f
команду?
tail -f
проверяет наличие дополнений.tail -F
проверяет переименования файлов.Ответы:
Если вы редактируете файл с помощью
vim
, обычно он читает файл в память, а затем записывает новый файл. Поэтомуtail
теперь он работает с устаревшей копией файла (которая остается в файловой системе до тех пор, покаtail
(и любая другая программа) не прекратит ее использовать.Вы можете заставить
tail
следовать имени файла (а не файла), используя:Обратите внимание на верхний регистр
F
.источник
tail -F
работает! Консоль теперь отображает сообщение типа «a.txt был заменен: следующий конец нового файла» и обновляется соответствующим образом. Благодарность!Насколько я понимаю, обычно при редактировании
vim
вы редактируете копию файла, которая перемещается на место, когда вы записываете свои изменения на диск. Поскольку это происходит путемunlink
вставки оригинала иmove
нового на место,tail
новые изменения в исходном файле не отображаются.источник