Сбросить терминальный буфер?

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

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

Почему?

Существует ли путь к моему собственному сценарию для "действия как терминал" для получения вывода, как только он обнаружился бы в терминале?

2
задан 24 June 2015 в 08:24

1 ответ

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

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

stdbuf -o0 ./program -a asdf

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

stdbuf -o0 ./program -a asdf | script.sh
0
ответ дан 3 December 2019 в 00:17

Другие вопросы по тегам:

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