Редагування текстового файлу за допомогою Vim не оновлює хвіст -f


17

Я використовую tail -f a.txtдля перегляду оновлень у файлі під назвою a.txt.

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

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

Я не обов'язково сподіваюся, що воно запустить оновлення у цьому вікні - але чому саме це не оновлює термінал, що виконує tail -fкоманду?


5
tail -fчеки на додатки. tail -Fперевірки на перейменування файлів.
тригр

Відповіді:


31

Якщо ви редагуєте файл за допомогою vim, як правило, він зчитує файл у пам'ять, а потім записує новий файл. Так tailтепер працює на застарілій копії файлу (який залишається в файлової системі до tail(і будь-який інший програми) припиняє використовувати його.

Ви можете змусити tailнаслідувати ім'я (а не файл), використовуючи:

tail -F yourfile  

Зверніть увагу на верхній регістр F .


1
tail -Fпрацює! Зараз на консолі відображається повідомлення типу "a.txt було замінено: наступний кінець нового файлу" та оновляється відповідно. Спасибі!
alex

8

Я розумію, що зазвичай під час редагування vimви редагуєте копію файлу, яка переміщується на місце, коли ви записуєте свої зміни на диск. Оскільки це відбувається за допомогою unlinkінгібування оригіналу та moveвстановлення нового на місце, tailнові зміни у вихідному файлі не бачать.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.