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


13

Есть ли разница между unbuffer (1) и stdbuf (1)? Исходя из того, что я понял, unbuffer делает больше, чем просто "лучший способ" - вызвать функцию libc set (X) buf в начале, а затем оставить все как есть?

Ответы:


14

Они работают совершенно по-разному.

Программа unbuffer использует ожидаемый запуск указанной команды. Так как ожидается, что псевдо-tty присоединяется к stdout дочернего процесса, он может быть обманут, думая, что он должен использовать буферизацию строки вместо буферизации блоков. Некоторые программы изменят свое поведение, когда isatty (stdout) верен, другие - нет, и очень трудно понять, что будет, а что нет.

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

Я узнал об этом

 apt-get source expect coreutils

и чтение соответствующего источника для каждой программы.


Некоторые вещи, вызывающие беспокойство (с man-страницы): unbuffer -pмогут работать некорректно, если процесс, подающий входные данные для снятия буфера, завершается. process1 | unbuffer -p process2 | process3Обратите внимание: если процесс1 завершается, процесс2 может еще не завершиться. Для
небуффера

Кажется, что stdbuf может также контролировать буферизацию stdin программ, использующих потоки Си, что кажется важным. Возможно, это следует включить в ответ на благо будущих читателей.
Дан3
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.