Adicionando o comportamento da cauda onde inserir adiciona linhas em branco para menos

8

Eu adoro less , que eu posso usar para seguir os logs com o +F flag (ou a tecla de atalho Shift F ), pesquisa para frente e para trás e geralmente se movem livremente pelo documento.

Mas há algo faltando em less : geralmente estou no final do arquivo e quero ver novas coisas acontecendo. Em tail -f eu acabei de acertar enter várias vezes, e novas linhas de log apareceriam claramente separadas das linhas antigas.

É possível adicionar isso a less ? Como?

    
por dangonfast 26.04.2013 / 12:00

5 respostas

6

Este não é realmente o comportamento de tail - é o terminal. O Tail está apenas enviando um fluxo de saída para o stdout, que vai para o seu terminal, e você está inserindo linhas em branco no meio dessa saída, pressionando enter. A própria cauda não está aceitando a entrada de você. Você pode digitar o que quiser e também aparecerá.

less , no entanto, é um aplicativo de console, que recebe informações e processa. Ele está gerenciando o console usando seqüências de controle de terminal, que é como você pode percorrer. Permitir que você insira caracteres arbitrários no fluxo pode atrapalhar a exibição e, de qualquer forma, menos usa sua entrada para controlar o programa.

Infelizmente, parece que não há como marcar visualmente a posição atual. Essa não é uma solicitação de recurso terrível, e menos ainda obtém novos recursos de tempos em tempos.

    
por 26.04.2013 / 18:51
4

Encontrei sua pergunta enquanto procurava a mesma resposta por mim mesmo.

Desapontado com a resposta aceita, eu criei uma solução alternativa. É menos que ideal, mas me permite marcar minha posição no log que estou seguindo com less , que é o ponto principal.

Eu criei um pequeno script executável (chamei-o de marklog ) com o seguinte conteúdo e coloquei em meu caminho:

#!/bin/sh
echo >> $1
echo >> $1
echo >> $1
echo 'date' ---------------------------------------------------------------------- >> $1
echo >> $1
echo >> $1

Naturalmente, isso só funciona se você tiver acesso de gravação ao arquivo de log - o que poderia ser um fator decisivo em muitas situações. Eu também criei esta versão que eu uso para gravar arquivos de log que não possuo (mas aos quais tenho acesso sudo):

#!/bin/sh
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo 'date' ------------------------------------------------------------------------- >> $1"
sudo sh -c "echo >> $1"
sudo sh -c "echo >> $1"

Esses scripts fornecem exatamente o tipo de quebra visual que eu estava procurando. Existem pelo menos 3 maneiras de usá-las:

  1. No ponto em que você normalmente pressionaria, digite algumas vezes ao usar tail -f , em vez disso, execute marklog de outro terminal (fornecendo o caminho para o arquivo de log como um argumento).

  2. Use Ctrl Z para suspender less para que você possa executar o script na mesma janela de terminal, mas quando for re-forçar less ( usando fg , claro), ele não estará mais no modo 'follow', então você precisará pressionar Shift F novamente ...

  3. Por último - e essa pode ser a maneira mais conveniente, porque você não precisa digitar o caminho para o arquivo de log: Execute marklog diretamente de less digitando !marklog % . Less substituirá o nome do arquivo atual por % . No entanto, less não responderá ao! enquanto estiver no modo 'follow', você terá que pressionar Ctrl C primeiro para sair do modo follow, rodar !marklog % , depois Shift F novamente.

Com o método 3, você também recebe o bônus extra do histórico de comandos de Less: Basta pressionar ! e usar a seta para cima para selecionar o comando mais recente (para mim, é sempre marklog ). / p>

Espero que isso ajude alguém tanto quanto já me ajudou.

    
por 25.10.2013 / 03:12
1

Pressione Shift + F no final do arquivo e menos começará a funcionar como tail -f .

    
por 26.04.2013 / 12:06
1

Eu não acho que você possa fazer isso. Eu usei m e ' para marcar locais de interesse e, em seguida, goto-los novamente, mas isso não lhe dá a separação que você pede. Talvez algo como multitail faça o que você quer.

    
por 26.04.2013 / 18:53
-1

A resposta do Lambart me leva à minha solução favorita. Thx para Lambart!

Apenas entre no modo de continuação ctrl c e digite !printf "\n\n---$(date)---\n\n" >> % . Depois disso, você deve pressionar enter mais uma vez e teclar shift f para iniciar novamente após o arquivo.

    
por 20.03.2018 / 11:31

Tags