Normalmente, stdout
é buffer de linha. Em outras palavras, contanto que seu printf
argumento termine com uma nova linha, você pode esperar que a linha seja impressa instantaneamente. Isso não parece se manter ao usar um pipe para redirecionar tee
.
Eu tenho um programa C ++,, a
que produz strings, sempre \n
terminadas, para stdout
.
Quando é executado sozinho ( ./a
), tudo imprime corretamente e na hora certa, conforme o esperado. No entanto, se eu canalizá-lo para tee
( ./a | tee output.txt
), ele não imprimirá nada até que seja encerrado, o que anula o propósito de uso tee
.
Eu sei que poderia corrigir isso adicionando um fflush(stdout)
após cada operação de impressão no programa C ++. Mas existe uma maneira mais limpa e mais fácil? Existe um comando que posso executar, por exemplo, que forçaria o stdout
buffer de linha, mesmo ao usar um pipe?
expect
me compilar, poisunbuffer
não parece estar incluído por padrão no OS X.