less com “arquivo de atualização” como funcionalidade

8

Eu quero assistir a um arquivo que é sobrescrito a cada 5 minutos com less . Como posso fazer com que less siga o novo descritor de arquivos em vez de manter o antigo exibido? watch "cat file" não fará isso porque o arquivo é muito longo para caber em uma janela de terminal.

    
por d135-1r43 06.11.2012 / 13:54

5 respostas

10

Você pode obter esse efeito emitindo o comando F ( Shift+F ) enquanto visualiza o arquivo em less . Para parar de seguir e voltar à paginação, pressione Ctrl+C

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

tail -f -s 60 myfile

verifica myfile para saída a cada 60 segundos.

EDIT: Devido à pergunta enganosa, a resposta acima foi insatisfatória. Segunda tentativa segue:

Para reabrir o mesmo arquivo em less a cada 5 minutos, tente o seguinte:

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

Isso gerará um subshell que origina outro processo de shell instruído a matar seu processo pai após 5 minutos. Em seguida, ele abre o arquivo com less . Quando o comando shell em segundo plano mata o sub-pai 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 eu conheço de matar isso é matar 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 , rm o killfile em outro shell.

    
por 06.11.2012 / 14:03
1

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 informe a sessão do vim para recarregar o arquivo assim que for atualizado:

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

Algumas dicas.

  • Isso obviamente não funcionará se o seu vim não for compilado com o recurso clientserver em.
  • inoifywait irá parar de funcionar quando o arquivo for excluído. Então, espero que seu arquivo seja sobrescrito. É possível contornar isso também, é claro.

E se você quiser ter uma experiência com mais less , use as macros less para obter suas associações de less em vim .

/usr/share/vim/vim73/macros/less.sh --servername refresh_session
    
por 06.11.2012 / 15:45
0

Eu encontrei um antigo, mas muito bom "menos" como programa (um "pager"). Tem 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 recurso de carregamento automático.

    
por 27.09.2017 / 14:39
-1

Você pode tentar este comando: tail -f file

    
por 06.11.2012 / 13:57
-1

A cauda é sua amiga. "tail -f filename" mostrará novas linhas quando elas aparecerem.

Ou, se você estiver procurando por alterações feitas no meio do arquivo, talvez execute um script a cada poucos minutos para fazer uma cópia do arquivo para um local temporário e fazer um diff nele?

    
por 06.11.2012 / 13:59

Tags