Назад | Перейти на главную страницу

меньше с «файлом обновления» как функциональность

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

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