Зазвичай stdout
це буферні лінії. Іншими словами, доки ваш printf
аргумент закінчується новим рядком, ви можете очікувати, що рядок буде надруковано миттєво. Схоже, це не затримується при використанні труби для переадресації tee
.
У мене є програма C ++ a
, яка виводить рядки, завжди \n
завершені до stdout
.
Коли він запускається сам ( ./a
), все друкується правильно та в потрібний час, як очікувалося. Однак якщо я передаю його tee
( ./a | tee output.txt
), він нічого не надрукує, поки не вийде, що перешкоджає використанню мети tee
.
Я знаю, що я міг це виправити, додаючи fflush(stdout)
після кожної операції друку в програму C ++. Але чи є чистіший, простіший спосіб? Чи є команда, яку я можу запустити, наприклад, яка змусить stdout
бути буферизованими рядками, навіть коли використовує трубу?
expect
себе, оскількиunbuffer
, здається, не включено за замовчуванням в OS X.