Limpar buffer de terminal?

2

Eu tenho um programa (proprietário) que inicio com ./program -a asdf no Terminal. Quando faço isso, posso ver toda a saída no momento certo.

No entanto, quando eu quiser usar a saída dos programas em um script meu e executar ./program -a asdf | script.sh , com "script.sh" contendo apenas read line e echo $line em um loop, a saída do programa é "esquisito". Quando o programa imprime o primeiro bloco de linhas, o script não imprime nada. Quando o programa (alguns minutos depois) imprime o segundo bloco de linhas, meu script imprime o primeiro bloco.

Por quê?

Existe uma maneira de o meu próprio script "agir como um terminal" para obter a saída assim que aparecer no terminal?

    
por Florian Bach 24.06.2015 / 06:33

1 resposta

0

O problema é que a saída de ./program -a asdf fica armazenada em buffer quando executada no pipeline, e que qualquer saída será armazenada no buffer até que esta fique cheia.

Você pode controlar o buffer de saída de um comando usando stdbuf ; em particular, para executar ./program -a asdf com um stdout sem buffer:

stdbuf -o0 ./program -a asdf

Para que seu pipeline bufferizado se torne:

stdbuf -o0 ./program -a asdf | script.sh
    
por kos 24.06.2015 / 07:09