less com funcionalidade semelhante a "atualizar arquivo"

less com funcionalidade semelhante a "atualizar arquivo"

Quero assistir a um arquivo que é substituído a cada 5 minutos por less. Como posso lessseguir o novo descritor de arquivo em vez de manter o antigo exibido? watch "cat file"não funcionará porque o arquivo é muito longo para caber em uma janela do terminal.

Responder1

Você pode obter esse efeito emitindo o Fcomando ( Shift+F) enquanto visualiza o arquivo no formato less. Para parar de seguir e voltar à paginação, pressioneCtrl+C

Como seu arquivo só muda a cada 5 minutos, você também pode usar tail -fe especificar um tempo de suspensão mais longo -s(o padrão é 1 segundo). Por exemplo,

tail -f -s 60 myfile

verifica myfilea saída a cada 60 segundos.

EDITAR: Devido à pergunta enganosa, a resposta acima foi insatisfatória. Segue a segunda tentativa:

Para reabrir o mesmo arquivo a lesscada 5 minutos, tente isto:

while true; do ( sh -c 'sleep 600 && kill $PPID' & less myfile ); done

Isso gerará um subshell que coloca em segundo plano outro processo de shell instruído a encerrar seu processo pai após 5 minutos. Em seguida, ele abre o arquivo com a extensão less. Quando o comando shell em segundo plano mata o subshell pai, ele mata todos os seus filhos, incluindo o comando "less". Então o loop inicia o processo novamente.

A única maneira fácil que conheço de eliminar isso é encerrar o terminal em que seu shell original está. Se isso for inaceitável, você pode usar o truque "killfile":

touch killfile
while [ -f killfile]; do stuff; done

Para parar de fazer stuff, rmo killfile em outro shell.

Responder2

Você pode fazer algo semelhante em vim.

Inicie uma sessão do servidor de vim:

vim -R --servername refresh_session

Em seguida, em outro console, monitore o arquivo em busca de atualizações e diga à sessão do vim para recarregar o arquivo assim que ele for atualizado:

inotifywait -e close_write -m your_log_file | while read filename events; do
    vim --servername refresh_session --remote $filename
done

Algumas pegadinhas.

  • É claro que isso não funcionará se o seu vimnão estiver compilado com o clientserverrecurso.
  • inoifywaitirá parar de funcionar quando o arquivo for excluído. Espero que seu arquivo seja sobrescrito. É possível contornar isso também, é claro.

E se você quiser ter uma lessexperiência mais parecida, você pode usar as lessmacros para inserir suas lesscombinações de teclas vim.

/usr/share/vim/vim73/macros/less.sh --servername refresh_session

Responder3

Você pode tentar este comando: tail -f file

Responder4

Encontrei um programa antigo, mas muito bom, semelhante ao "menos" (um "pager"). Possui um comando "R" que atualiza o arquivo.

É chamado"lv", Você pode instalá-lo no Ubuntu usando:

sudo apt install lv

No entanto, parece não ter nenhum recurso de recarga automática.

informação relacionada