Очистить терминал буфера?
У меня есть (проприетарная) программа, с которой я начинаю ./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