Normalmente, stdouté buffer de linha. Em outras palavras, contanto que seu printfargumento 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 ++,, aque produz strings, sempre \nterminadas, 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 stdoutbuffer de linha, mesmo ao usar um pipe?
expectme compilar, poisunbuffernão parece estar incluído por padrão no OS X.