2013-06-14 3 views
0

У меня есть сценарий, который считывает вывод команды с использованием while read и выполняет незначительные настройки (например, окрашивание, удаление некоторых строк). Иногда, однако, я получаю строку вида:Выход фильтра Bash при приеме ввода

Would you like to hello world? (y/N):

Эта линия не завершена (и, таким образом, не отображается), пока я не ввести вход.

Как изменить этот скрипт, чтобы разрешить мне видеть эти неполные строки, на которых я могу ввести ввод?

ответ

1

Вам не нужно использовать while read, так как read обрабатывает только «полные» линии, то есть линии, которые заканчиваются LF. (В качестве альтернативы read имеет опцию -d delim, в которой говорится о том, что для устранения другого разделителя в качестве маркера конца строки это может быть знак вопроса или : в конце подсказки. Допустим, вы не можете использовать это в своем конкретном случае, потому что вы не сможете предсказать, когда использовать -d).

В зависимости от того, что именно делает ваш сценарий, вы можете контактировать всю настройку, например. через sed, awk и тому подобное.

Для получения более подробного ответа вам необходимо опубликовать внутренности вашего текущего скрипта.

+2

Другой нестандартный вариант может быть '-t ', чтобы тайм-аут и вернуть все, что было прочитано до сих пор. Протестировано с помощью 'read -t 1 bar <<(echo -n value)', но это может немного отличаться от ваших обстоятельств. – chepner

0

Если вы ответите на экране таким же образом все время, и если команда считывает данные из стандартного ввода (в отличие от SSH, например), то вы можете

yes y | command | while read ... 
Смежные вопросы