Обычно stdout
это строчная буферизация. Другими словами, если ваш printf
аргумент заканчивается новой строкой, вы можете ожидать, что строка будет напечатана мгновенно. Похоже, это не выполняется при использовании канала для перенаправления tee
.
У меня есть программа на C ++ a
, которая выводит строки, которые всегда \n
завершаются, в stdout
.
Когда он запускается сам по себе ( ./a
), все печатается правильно и в нужное время, как и ожидалось. Однако, если я передаю его в tee
( ./a | tee output.txt
), он ничего не печатает, пока не завершит работу, что противоречит цели использования tee
.
Я знаю, что могу исправить это, добавив fflush(stdout)
после каждой операции печати в программе на C ++. Но есть ли более чистый и простой способ? Есть ли команда, которую я могу запустить, например, для принудительной stdout
строчной буферизации даже при использовании канала?
expect
себя, посколькуunbuffer
, похоже, он не включен по умолчанию в OS X.