Вопрос: меньше с «файлом обновления», подобным функциональности


Я хочу посмотреть файл, который перезаписывается каждые 5 минут less, Как я могу сделать less следовать за новым файловым дескриптором вместо сохранения старого? watch "cat file" не будет делать этого, потому что файл слишком длинный, чтобы вписаться в одно окно терминала.


7
2017-11-06 12:54


Источник


«Follow» подразумевает следующий конец файла. Вы можете уточнить, что ваш файл перезаписывается, и вы заинтересованы в его повторном открытии. - chutz
Я имел в виду следующий дескриптор файла, поскольку он определен в tail -f. Но тем не менее я уточнил свой вопрос. - d135-1r43
использование less --follow-name видеть unix.stackexchange.com/a/74287/112522 - djsutho


Ответы:


Вы можете получить этот эффект, выпустив 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 killfile в другой оболочке.


9
2017-11-06 13:03



Это лишь частично полезно для моего случая. Наблюдаемый файл очень большой, обновленная информация вверху. Это не файл журнала прокрутки. Shift + F немедленно прокручивается до конца файла ... - d135-1r43
Вы должны изменить свой вопрос, чтобы уточнить. Я также отредактировал свой ответ, чтобы ответить на этот вопрос. - bonsaiviking


Вы можете сделать что-то подобное в 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

1
2017-11-06 14:45





Я нашел старую, но очень хорошую «менее» программу («пейджер»). Он имеет команду «R», которая обновляет файл.

Это называется «Лев», Вы можете установить его на Ubuntu, используя:

sudo apt install lv

Однако, похоже, у него нет функции автозагрузки.


0
2017-09-27 12:39





Вы можете попробовать эту команду: tail -f file


-1
2017-11-06 12:57





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

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


-1
2017-11-06 12:59



В первоначальном посте было совершенно ясно, что есть «новый файл». Поэтому дескриптор файла изменился, но tail -f все равно прочитал бы старый. - Alastair Irvine
Я не думаю, что это очень справедливо. Чтобы быть кристально чистым, нам нужно взглянуть на оригинал, неотредактированный пост, потому что, если вы посмотрите на дату моего ответа, это вопрос, на который я отвечал. В этом неотредактированном вопросе мой ответ имеет смысл. serverfault.com/posts/445899/revisions - David W
Я проверял изменения. Ключевые слова «новый файл». - Alastair Irvine