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