Adicionar comportamento de cauda em que enter adiciona linhas em branco a menos

8

Eu amo less, que eu posso usar para seguir registros com a +Fbandeira (ou a ShiftFtecla de atalho), procurar para frente e para trás e, geralmente, mover-me livremente pelo documento.

Mas há uma coisa que falta less: geralmente estou no final do arquivo e quero ver coisas novas acontecendo. Em tail -fapenas atingi entervárias vezes, e as novas linhas de log apareceriam claramente separadas das linhas antigas.

É possível adicionar isso a less? Quão?

blueFast
fonte
Eu não acho que você pode fazer isso, embora às vezes eu faça eco -e '\ n \ n \ n \ n \ n' >> / dev / pts / 0, por exemplo, não é tão limpo, mas pelo menos permite Eu tenho um ponto de referência de onde parei quando desvio o olhar.
precisa saber é o seguinte

Respostas:

6

Este não é realmente tailo comportamento - é 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 cauda em si não está realmente aceitando informações de você. Você pode digitar o que quiser e isso também será exibido.

less, no entanto, é um aplicativo de console e recebe entrada e processa-o. Ele está gerenciando o console usando sequências de controle de terminal, e é assim que você pode rolar. Permitir que você insira caracteres arbitrários no fluxo atrapalharia a exibição e, de qualquer forma, menos usa sua entrada para controlar o programa.

Infelizmente, não parece haver uma maneira de marcar a posição atual visualmente. Isso não é um pedido de recurso terrível, porém, e menos não ainda obter novos recursos ao longo do tempo.

mattdm
fonte
Você tem um link em mãos para solicitar esse recurso aos menos mantenedores?
precisa saber é o seguinte
@gonvaled gnu.org/software/less
Michael Hampton
4

Encontrei sua pergunta enquanto procurava a mesma resposta para mim.

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

Criei um pequeno script executável (o chamei marklog) com o seguinte conteúdo e o coloquei no meu caminho:

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

Obviamente, isso só funcionará se você tiver acesso de gravação ao arquivo de log - o que poderia ser um fator decisivo em muitas situações. Também criei esta versão que uso para gravar em 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 interrupção visual que eu estava procurando. Existem pelo menos três maneiras de usá-las:

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

  2. Use CtrlZpara suspender lesspara que você possa executar o script na mesma janela do terminal, mas quando você voltar ao primeiro plano less(usando fg, é claro), ele não estará mais no modo 'seguir', portanto, será necessário pressionar ShiftFnovamente ...

  3. Por fim - e essa pode ser a maneira mais conveniente, porque você não precisa digitar o caminho para o arquivo de log: Execute marklogdiretamente lessdigitando !marklog %. Lesssubstituirá o nome do arquivo atual por %. No entanto, lessnão responderá ao! enquanto estiver no modo 'seguir', será necessário pressionar CtrlCprimeiro para sair do modo de seguir, executar !marklog %e ShiftFnovamente.

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

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

Lambart
fonte
1

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

Kofemann
fonte
2
Não, não vai. Ele seguirá novas linhas, mas não funcionará como tail -f. Especificamente, ele não aceita enter como novas linhas, que é o único ponto da minha pergunta. Além disso, já mencionado Shift+Fna pergunta (com um pequeno erro, devo dizer)
blueFast
1

Eu não acho que você pode fazer isso. Eu usei me 'para marcar locais de interesse e depois ir para eles novamente, mas isso não dá a você a separação que você pede. Talvez algo como multitail faça o que você deseja.

user9517
fonte
-1

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

Basta inserir o modo de seguir ctrlce entrar !printf "\n\n---$(date)---\n\n" >> %. Depois disso, você deve pressionar entermais uma vez e pressionar shiftfpara iniciar novamente após o arquivo.

iRaS
fonte