Normalerweise stdout
ist zeilengepuffert. Mit anderen Worten, solange Ihr printf
Argument mit einer neuen Zeile endet, können Sie erwarten, dass die Zeile sofort gedruckt wird. Dies scheint nicht zu gelten, wenn Sie eine Pipe zum Umleiten verwenden tee
.
Ich habe ein C ++ - Programm, a
das Zeichenfolgen ausgibt, die immer abgeschlossen \n
sind stdout
.
Wenn es von selbst ausgeführt wird ( ./a
), wird alles wie erwartet korrekt und zur richtigen Zeit gedruckt. Wenn ich es jedoch an tee
( ./a | tee output.txt
) weitergebe, wird nichts gedruckt, bis es beendet wird, was den Verwendungszweck zunichte macht tee
.
Ich weiß, dass ich das Problem beheben kann, indem ich fflush(stdout)
nach jedem Druckvorgang im C ++ - Programm ein hinzufüge . Aber gibt es einen saubereren und einfacheren Weg? Gibt es einen Befehl, den ich zum Beispiel ausführen kann, der die Zeilenpufferung erzwingen würde stdout
, selbst wenn eine Pipe verwendet wird?
expect
mich selbst kompilieren musste, daunbuffer
es in OS X nicht standardmäßig enthalten zu sein scheint.