
Я хочу посмотреть файл, который перезаписывается каждые 5 минут с помощью less
. Как мне заставить less
его следовать новому дескриптору файла вместо того, чтобы отображать старый? watch "cat file"
не получится, потому что файл слишком длинный, чтобы поместиться в одно окно терминала.
решение1
Вы можете получить этот эффект, выполнив F
команду ( Shift+F
) во время просмотра файла в less
. Чтобы остановить отслеживание и вернуться к перелистыванию, нажмитеCtrl+C
Поскольку ваш файл меняется только каждые 5 минут, вы также можете использовать tail -f
и указать более длительное время сна с -s
(по умолчанию 1 секунда). Например,
tail -f -s 60 myfile
проверяет myfile
наличие выходных данных каждые 60 секунд.
EDIT: Из-за вводящего в заблуждение вопроса ответ выше был неудовлетворительным. Вторая попытка следует:
Чтобы повторно открывать один и тот же файл less
каждые 5 минут, попробуйте сделать следующее:
while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done
Это породит подоболочку, которая фоновый процесс другой оболочки, проинструктированный завершить свой родительский процесс через 5 минут. Затем он открывает файл с помощью less
. Когда фоновая команда оболочки завершает родительскую подоболочку, она завершает все ее дочерние процессы, включая команду "less". Затем цикл начинает процесс снова.
Единственный простой способ, который я знаю, это завершить работу терминала, в котором находится ваша оригинальная оболочка. Если это неприемлемо, вы можете использовать трюк с «killfile»:
touch killfile
while [ -f killfile]; do stuff; done
Чтобы прекратить делать это stuff
, rm
выполните killfile в другой оболочке.
решение2
Нечто подобное можно сделать и в 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
решение3
Вы можете попробовать эту команду: tail -f file
решение4
Я нашел старую, но очень хорошую программу типа "less" ("пейджер"). В ней есть команда "R", которая обновляет файл.
Это называется"лв", Вы можете установить его в Ubuntu с помощью:
sudo apt install lv
Однако, похоже, у него нет функции автоперезагрузки.