buffers XTerm saída ao ler de fifo

0

Eu tenho uma janela xterm que gostaria de exibir continuamente a saída de um pipe nomeado. No entanto, parece haver algum buffer ocorrendo, e não consigo encontrar o que está acontecendo.

Eu abro dois terminais. No primeiro, eu faço um cachimbo e presto atenção a qualquer coisa enviada para ele.

mkfifo pipe
tail -f pipe

No segundo terminal, envio duas mensagens pelo pipe, a partir de um único processo, separadas por algum tempo. Eu uso stdbuf para garantir que a saída do comando não tenha buffer.

stdbuf -o0 bash -c 'echo hi; sleep 5; echo bye' > pipe

Isso funciona como esperado, com o primeiro terminal imprimindo hi e, em seguida, imprimindo bye cinco segundos depois.

No entanto, se eu executar o tail -f pipe dentro de uma janela xterm, as mensagens não aparecerão até que o programa saia. Claramente, há algum buffer sendo feito, mas não consigo encontrar onde está. Existe uma maneira de evitar que o xterm armazene em buffer a saída de programas?

Meu "terminal normal" usa o PuTTY, ssh-ed do Windows 7 para a máquina Linux. Na máquina Linux, uname -a retorna Linux hostname 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u1 x86_64 GNU/Linux e xterm -v retorna XTerm(278) .

    
por Eldritch Cheese 09.10.2015 / 17:09

1 resposta

0

Nos meus testes, o buffer ocorre apenas para a primeira execução do script bash. Então

bash -c 'echo' > pipe; bash -c 'echo hi; sleep 5; echo bye' > pipe

faz praticamente o que você quer, mas com uma nova linha extra no topo. (Eu nem precisei de stdbuf).

    
por 11.10.2015 / 00:16