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