No terminal, eu posso procurar no final do log mais rápido do que os dados chegam lá

2

[The Question]
Existe alguma maneira de ter o combo pipe / tee / write escrevendo linhas imediatamente? ... se isso puder ser feito, qual é o trade-off?

[O pano de fundo]
Meu script envia um pressionamento de tecla para o terminal, que está executando app .
Esse pressionamento de tecla faz com que app escreva um marcador em seu log.
O log é a saída de tela normal do app (linhas com registro de data e hora).
O log está sendo escrito via | tee -a log

O marcador marca a linha que quero; ie. a linha com registro de data e hora antes do marcador.

O problema é que quando eu então imediatamente pesquiso o log (usando sed do mesmo script), às vezes ele retorna um marcador anterior, ie. o marcador mais recente ainda não foi gravado no log.

Suponho que isso seja um problema de buffer, mas estou em território desconhecido com isso.

Não tenho certeza se é importante: o script é elisp . O terminal é emacs terminal emulator com um shell bash .

    
por Peter.O 10.12.2011 / 16:41

1 resposta

4

Suponho que o problema não seja tee que pareço lembrar de não armazenar em buffer ou na maioria dos buffers por linhas.

Portanto, se o problema for você app , você pode modificar seu comportamento usando o utilitário stdbuf (a menos que app faça suas próprias modificações no buffer de stdout). Você pode usá-lo desta maneira:

stdbuf -o 0 app args | tee -a log

A opção -o 0 configura a stdout de app como sem buffer.

    
por 10.12.2011 / 17:04