Как сделать вывод любой команды оболочки небуферизованным?

Есть ли способ запуска команд оболочки без буферизации вывода?

Например, hexdump file | ./my_script будет только передавать ввод из hexdump в my_script в буферизованных блоках, а не построчно.

На самом деле я хочу знать общее решение, как сделать любую команду небуферизованной?

60
задан Nakilon 9 February 2015 в 08:54
поделиться

2 ответа

AFAIK, вы не можете сделать это без уродливых хаков. Запись в трубу (или чтение из нее) автоматически включает полную буферизацию, и вы ничего не можете с этим поделать :-(. "Буферизация строки" (то, что вам нужно) используется только при чтении/записи в терминале. Уродливые хаки именно это и делают: Они подключают программу к псевдотерминалу, так что другие инструменты в трубе читают/пишут с этого терминала в режиме буферизации строк. Вся проблема описана здесь:

На странице также есть несколько предложений (вышеупомянутые "уродливые хаки"), что делать, например, использовать unbuffer или провернуть несколько трюков с LD_PRELOAD.

19
ответ дан 24 November 2019 в 17:30
поделиться

Команда unbuffer из пакета expect отключает буферизацию вывода:
Ubuntu Manpage: unbuffer - unbuffer output

Пример использования:

unbuffer hexdump file | ./my_script
31
ответ дан 24 November 2019 в 17:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: