Есть ли способ запуска команд оболочки без буферизации вывода?
Например, hexdump file | ./my_script
будет только передавать ввод из hexdump в my_script в буферизованных блоках, а не построчно.
На самом деле я хочу знать общее решение, как сделать любую команду небуферизованной?
AFAIK, вы не можете сделать это без уродливых хаков. Запись в трубу (или чтение из нее) автоматически включает полную буферизацию, и вы ничего не можете с этим поделать :-(. "Буферизация строки" (то, что вам нужно) используется только при чтении/записи в терминале. Уродливые хаки именно это и делают: Они подключают программу к псевдотерминалу, так что другие инструменты в трубе читают/пишут с этого терминала в режиме буферизации строк. Вся проблема описана здесь:
На странице также есть несколько предложений (вышеупомянутые "уродливые хаки"), что делать, например, использовать unbuffer
или провернуть несколько трюков с LD_PRELOAD
.
Команда unbuffer
из пакета expect
отключает буферизацию вывода:
Ubuntu Manpage: unbuffer - unbuffer output
Пример использования:
unbuffer hexdump file | ./my_script