Я хочу посмотреть файл, который перезаписывается каждые 5 минут с помощью less
. Как я могу сделать less
следовать новому файловому дескриптору вместо того, чтобы отображать старый? watch "cat file"
не будет этого делать, потому что файл слишком длинный, чтобы поместиться в одно окно терминала.
Вы можете получить этот эффект, выполнив F
команда (Shift+F
) при просмотре файла в less
. Чтобы прекратить подписку и вернуться к пейджингу, нажмите Ctrl+C
Поскольку ваш файл меняется каждые 5 минут, вы также можете использовать tail -f
и укажите более длительное время сна с помощью -s
(по умолчанию 1 секунда). Например,
tail -f -s 60 myfile
чеки myfile
для вывода каждые 60 секунд.
РЕДАКТИРОВАТЬ: из-за вводящего в заблуждение вопроса приведенный выше ответ был неудовлетворительным. Далее следует вторая попытка:
Чтобы повторно открыть тот же файл в less
каждые 5 минут попробуйте следующее:
while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done
Это порождает подоболочку, которая создает фон для другого процесса оболочки, которому было дано указание убить его родительский процесс через 5 минут. Затем он открывает файл с less
. Когда команда фоновой оболочки уничтожает родительскую подоболочку, она уничтожает все ее дочерние элементы, включая команду «меньше». Затем цикл запускает процесс снова.
Единственный известный мне простой способ убить это - убить терминал, в котором находится ваша исходная оболочка. Если это неприемлемо, вы можете использовать трюк с "killfile":
touch killfile
while [ -f killfile]; do stuff; done
Прекратить делать stuff
, rm
файл уничтожения в другой оболочке.
Вы можете сделать что-то подобное в vim
.
Запустить сеанс сервера vim
:
vim -R --servername refresh_session
Затем в другой консоли проследите за обновлениями файла и скажите сеансу vim перезагрузить файл, как только он будет обновлен:
inotifywait -e close_write -m your_log_file | while read filename events; do
vim --servername refresh_session --remote $filename
done
Несколько ошибок.
vim
не скомпилирован с clientserver
особенность в.inoifywait
перестанет работать, когда файл будет удален. Так что я надеюсь, что ваш файл будет перезаписан. Конечно, это тоже можно обойти.И если вы хотите иметь больше less
-как опыт, вы можете использовать less
макросы, чтобы получить ваш less
привязки клавиш в vim
.
/usr/share/vim/vim73/macros/less.sh --servername refresh_session
Нашел старую, но очень хорошую "менее" похожую программу ("пейджер"). В нем есть команда «R», которая обновляет файл.
Это называется "lv", Вы можете установить его в Ubuntu, используя:
sudo apt install lv
Однако, похоже, у него нет функции автоматической перезагрузки.
Вы можете попробовать эту команду: tail -f file
Хвост - твой друг. "tail -f filename" покажет вам новые строки, когда они появятся.
Или, если вы ищете изменения, сделанные в середине файла, возможно, запускайте скрипт каждые несколько минут, чтобы сделать копию файла во временное место и провести с ним сравнение?