Меньше с "файлом обновления", как функциональность
Я хочу посмотреть файл, который перезаписывается каждые 5 минут less
, Как я могу сделать less
следовать новому дескриптору файла вместо сохранения старого? watch "cat file"
не будет делать это, потому что файл слишком длинный, чтобы поместиться в одном окне терминала.
5 ответов
Вы можете получить этот эффект, выдав 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
, Когда команда фоновой оболочки убивает родительский подоболочек, она убивает всех его дочерних элементов, включая команду "less". Затем цикл запускает процесс заново.
Единственный простой способ уничтожить это - убить терминал, в котором находится ваша оригинальная оболочка. Если это недопустимо, вы можете использовать трюк "killfile":
touch killfile
while [ -f killfile]; do stuff; done
Перестать делать stuff
, rm
killfile в другой оболочке.
Вы можете сделать что-то подобное в 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 filename" покажет вам новые строки, когда они появятся.
Или, если вы ищете изменения, сделанные в середине файла, возможно, запускаете скрипт каждые несколько минут, чтобы сделать копию файла во временную папку и выполнить ее различие?