Меньше с "файлом обновления", как функциональность

Я хочу посмотреть файл, который перезаписывается каждые 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 file

Хвост твой друг. "tail -f filename" покажет вам новые строки, когда они появятся.

Или, если вы ищете изменения, сделанные в середине файла, возможно, запускаете скрипт каждые несколько минут, чтобы сделать копию файла во временную папку и выполнить ее различие?

Другие вопросы по тегам