Muitos (a maioria?) programas e praticamente todos os programas C ou C ++, 'totalmente' buffer stdout quando é um arquivo de pipe ou disco ou em geral não isattty()
e qualquer saída ainda no buffer e não liberado para o sistema operacional quando você mata, ele é perdido. Normalmente, os programas NÃO fazem esse buffer para stderr, e é por isso que isso funciona.
No geral, use stdbuf -oL program ...
ou possivelmente -o0
. Alguns programas têm suas próprias opções privadas, por ex. O GNU sed tem -u/--unbuffered
.
Como alternativa, use algo que execute o programa em um arquivo e, assim, desative o buffer, incluindo script
, screen
, expect
ou sua forma simplificada unbuffer
ou ssh -t
.
Para obter mais detalhes e opções, consulte Desativar o buffer no tubo