Відкрийте текстовий файл у терміналі та автоматично оновіть його щоразу, коли він буде змінений


15

Як відкрити текстовий файл у терміналі з миттєвим автоматичним оновленням кожного разу, коли він змінюється?

Я дивився vimз :set autoread, але це вимагає деякого елементарного введення (наприклад, при натисканні на кнопку всередині vim) , щоб викликати оновлення.

Я хочу, щоб автоматичне оновлення було вільним від руки. Чи є якийсь хак для цього?

Я використовую Crunchbang 11, але мені досить зручно з терміналом.


Для чого це добре? Про що цей файл? Якщо це журнал, зазвичай до нього додаються нові рядки внизу, то ви можете просто використовувати tail -f $file.
джиріб

Зокрема, я пишу сценарій Python, який записує інший текстовий файл, а не просто додає нові рядки внизу. Я хотів би переглянути цей текстовий файл.
Кіт

прищеплювати .......?
джибір

Я не знайомий inotify. Подивившись, це API, до якого мені потрібно отримати доступ із програмуванням на С, до якого я не схильний робити скоро. Я шукаю рішення командної оболонки.
Кіт

1
Існує набір інструментів , які можна використовувати з командного рядка називається, як правило, inotify-tools. Вони використовують функцію, вбудовану в ядро ​​під назвою inotify. Будь-який час, коли файл діятиме після події, надсилається через ініціювати, на який можна діяти. Багато прогр. лонгс. наприклад, у Python, Perl тощо, є бібліотеки, які містять API Inotify. Див. Сторінку Wikipedia pg: en.wikipedia.org/wiki/Inotify
slm

Відповіді:


27

Це має показувати вам файл раз на секунду:

watch -n 1 cat file

1
Це те, що я шукаю. Спасибі! Я продовжив його даліwatch -tpcn 1 pygmentize -g filename
Kit

@ Будьте уважні watch -g, це не працює так, як ви очікували .
terdon

@terdon, -gперемикач насправді для pygmentize. У будь-якому випадку, дякую за попередження.
Кіт

Якщо вміст файлу перевищує одну сторінку, використовуючи цю, ви не можете прокрутити екран, щоб перевірити решту вмісту файлу.
CodyChan

1
Чому б не просто watch -n 1 tail file?
Варун

8
tail -f /var/log/syslog

Показує оновлення syslog по мірі їх додавання до файлу.


Це показує рядки, як вони додані правильно? ОП потребує повного оновлення.
Sean256

працює і на windows з git-bash
Девід

3

Я б використав, watchяк пропонує інша відповідь, але просто для того, щоб показати вам, як можна підійти до, здавалося б, складної проблеми, використовуючи будівельні блоки, надані оболонкою, такою як Unix; певний час цикл може бути простим способом виконання циклу.

$ while [ 1 ]; do clear; date; cat <afile>; sleep 1 ;done

Приклад

$ while [ 1 ]; do clear; date; cat sample.txt; sleep 1 ;done
Fri Nov 15 09:17:39 EST 2013
1
2
3
4
5

Екран очищається, а потім через секунду відображається:

Fri Nov 15 09:17:40 EST 2013
1
2
3
4
5

2

Як запропоновано в коментарях, ви також можете використовувати, inotifyхоча це надмірно. На сьогодні найпростішим є використання watch. Ось один із способів зробити це inotify:

  1. Встановіть inotify-toolsпакет

    sudo apt-get install inotify-tools
    
  2. Використовуйте inotifywatchдля перевірки файлу на наявність змін. Запустіть його у циклі та catфайлі, якщо виявлено зміну (саме тому я grepдля рядка total):

    while true; do 
      inotifywatch -e modify -t 1 kk 2>/dev/null | grep -q total && 
      echo "$(date;cat kk)"; 
    done
    

Проходження -q(або --quiet) до grepзамовчує відповідність лінії "total".
FichteFoll

@FichteFoll хороший момент (будь ласка, ігноруйте мій попередній коментар, якщо ви бачили його, перш ніж я видаляв, я був повільним). Спасибі, відредаговано.
terdon

0

watch(1)є дійсно корисним інструментом. [1]

Я б не рекомендував користуватися, catхоча.

Натомість використовуйте headабо tailдля того, чи потрібно бачити початок чи кінець файлу.

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