Zwykle stdout
jest buforowany wierszami. Innymi słowy, dopóki printf
argument kończy się znakiem nowej linii, możesz oczekiwać, że zostanie on natychmiast wydrukowany. Wydaje się, że nie działa, gdy używasz potoku do przekierowania tee
.
Mam program w C ++ a
, który wyprowadza ciągi, zawsze \n
zakończone, do stdout
.
Gdy jest uruchamiany samodzielnie ( ./a
), wszystko jest drukowane poprawnie i we właściwym czasie, zgodnie z oczekiwaniami. Jeśli jednak prześlę to do tee
( ./a | tee output.txt
), nic nie drukuje, dopóki nie zakończy pracy, co jest sprzeczne z celem użycia tee
.
Wiem, że mogłem to naprawić dodając fflush(stdout)
po każdej operacji drukowania w programie C ++. Ale czy istnieje czystszy i łatwiejszy sposób? Czy istnieje polecenie, które mogę uruchomić, na przykład, które stdout
wymusiłoby buforowanie liniowe, nawet przy użyciu potoku?
expect
ponieważunbuffer
nie wydaje się być domyślnie uwzględniony w systemie OS X.