Очистить терминал буфера?

У меня есть (проприетарная) программа, с которой я начинаю ./program -a asdf в Терминале. Когда я это делаю, я вижу все результаты в нужное время.

Однако, когда я хочу использовать вывод программ в моем скрипте и запустить ./program -a asdf | script.sh, с "script.sh" просто содержит read line а также echo $line в цикле вывод программы "странный". Когда программа печатает первый блок строк, скрипт ничего не печатает. Когда программа (через несколько минут) напечатает 2-й блок строк, мой скрипт напечатает первый блок.

Зачем?

Есть ли способ для моего собственного сценария "действовать как терминал", чтобы получить выходные данные, как только они появятся в терминале?

1 ответ

Решение

Проблема в том, что ./program -a asdfВыходные данные буферизируются при запуске в конвейере, и что любой вывод будет находиться в буфере, пока этот не заполнится.

Вы можете управлять буферизацией вывода команды, используя stdbuf; в частности, запустить ./program -a asdf с небуферизованным stdout:

stdbuf -o0 ./program -a asdf

Так что ваш буферизованный конвейер становится:

stdbuf -o0 ./program -a asdf | script.sh
Другие вопросы по тегам