Siga um pipe usando menos?

21

Pode menos seguir (pressionando F) uma entrada canalizada (similar a um arquivo)? Para um arquivo que está sendo gravado, o comando

less <file>

seguirá o arquivo ao pressionar F.

Mas se eu tiver um comando que canalize a saída diretamente para menos, como este

command | less

pressionando F não fará nada.

Então parece que os pipes não podem ser seguidos como os arquivos podem? Ou talvez tenha a ver com comando também escrevendo para STDERR? O efeito que estou tentando alcançar é sempre ver a saída mais recente do comando: assim como manter o PageDown pressionado!

Uma observação relacionada vale para G (ir para o final): quando canalizar diretamente para menos, não funcionará.

    
por haelix 14.12.2011 / 12:04

3 respostas

18

Pressionar F ou G faz com que less tente alcançar a entrada EOF. Se a entrada for um canal, less trava até que o tubo seja fechado do outro lado (e não "não faz nada").

Isso pode ser contornado salvando a saída do comando em um arquivo temporário em segundo plano e, em seguida, usando-o como entrada para less :

command > /tmp/x &
less +F /tmp/x; kill %; rm /tmp/x

Não há opção para fazer isso em less apenas; no entanto, admito que seria útil.

    
por 26.06.2014 / 10:02
5

Can less follow (by pressing F) a piped input (similarly to a file)?

Sim, começando com a versão 474. No entanto, ela não é mencionada nas notas da versão de qualquer versão, já que há um problema restante com esse recurso atualmente. Abaixo está um comentário do mantenedor de menos - Mark Nudelman:

Em relação ao comando F nos pipes, isso também é corrigido em menos-474. Em vez de procurar EOF, o comando F procura o final da entrada em buffer e começa a ler lá. No entanto, não é realmente utilizável porque quando você pressiona CTRL-C para parar o comando F, ele mata o processo produzindo a saída. Não sei como consertar isso.

Até que este problema seja corrigido em menos, pode-se contornar usando os recursos do shell. Veja minha resposta para Existe alguma maneira de sair do modo de seguir "menos" sem parar outros processos no pipe ? pergunta para detalhes.

Para referência, o problema com o F não trabalhando com pipes tem o número de referência 300 na lista de bugs conhecidos e é intitulado O comando F não funciona na entrada canalizada.

A related remark holds for G (go to end): when piping directly to less, it won't work.

Funciona a partir da versão 466. Citando notas de lançamento para esta versão:

New command ESC-G goes to end of currently buffered data in a pipe

    
por 29.01.2015 / 15:28
2

Da página do menos homem

[Keyboard] COMMANDS [...]

   F      Scroll  forward, and keep trying to read when the end of file is reached.  Normally this command would be used when already
          at the end of the file.  It is a way to monitor the tail of a file which is growing while it is being viewed.  (The  behav‐
          ior is similar to the "tail -f" command.)

, então isso deve funcionar e realmente funciona para mim.

    
por 14.12.2011 / 13:50

Tags