`unbuffer` або` stdbuf` для видалення буферизації stdout?


13

Чи є різниця між unbuffer (1) та stdbuf (1)? З того, що я збираю, unbuffer докладає більше, ніж "найкраще зусилля" викликати buf набір функцій libc (X) на початку, а потім пускати речі?

Відповіді:


14

Вони працюють абсолютно різними способами.

Програмний розблокувальник використовує очікуваний запуск названої команди. Оскільки очікує, що створює псевдо-tty для приєднання до stdout дочірнього процесу, дитина може обдурити, що він повинен використовувати буферизацію ліній замість блокування буферизації. Деякі програми змінять свою поведінку, коли isatty (stdout) правдивий, інші - ні, і дуже важко зрозуміти, що буде, а що - ні.

Програма stdbuf намагається поставити libstdbuf перед libc для динамічно завантажених бінарних файлів. Де libstdbuf переосмислює стратегію буферизації за замовчуванням викликів libc stdio.

Я це з'ясував

 apt-get source expect coreutils

та читання відповідного джерела для кожної програми.


Деякі занепокоєння (з manpage): unbuffer -pможуть здатися, що вони працюють неправильно, якщо вихід із подачі процесу на скасування завантаження. Поміркуйте: process1 | unbuffer -p process2 | process3Якщо процес1 закінчується, процес2 може ще не закінчитися. Неможливо, щоб
розпусник

Здається, stdbuf також може контролювати stdin буферизацію програм, які використовують потоки C, що здається важливим. Можливо, це слід включити у відповідь на користь майбутніх читачів.
dan3
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.