Como posso forçar menos para parar o buffer de sua linha de entrada por linha?

3

Ao ler de stdin, less não exibirá nenhuma saída até que uma linha inteira seja lida.

Eu uso um script que imprime o progresso em uma linha, sem imprimir uma nova linha, e eu realmente gostaria de ver esse progresso mesmo quando eu enviar para less .

Aqui está um exemplo de código bash para demonstrar meu problema:

while true ; do echo -n zzz ; sleep 1s ; done | less

Existe um botão que eu posso pressionar para forçar less a exibir sua entrada coletada, ou existe uma opção para desativar esse tipo de buffer?

    
por Flimm 12.10.2011 / 19:46

1 resposta

1

Eu não acho que seja possível.

Você pode filtrar a entrada para inserir quebras de linha. Aqui está um filtro muito simplista que não cuida de onde ele coloca as quebras de linha; é definitivamente possível melhorar isso, mas pelo menos você verá sua saída quase em tempo real.

perl -e '$| = 1; while (sysread STDIN, $_, 80) {print; /\n/ or print "\n"}

Como alternativa, você pode mudar para outro visualizador. O modo shell do Emacs é uma solução pesada se você não usar o Emacs. Você executaria o script em um buffer *shell* (criado com M-x shell ). Além da interface diferente, ele pode fazer tudo o que menos pode fazer, e mais, inclusive mostrando a saída como ela é fornecida.

    
por 13.10.2011 / 02:15

Tags