LINUX.ORG.RU

Bash: неочевидное поведение read

 , , , ,


0

2

Глупый заголовок темы, но тем не менее.

Имеется скрипт на баше, выполняющий большое количество разных операций. Во время проверки работы скрипта перед запуском процедуры, которая много флудит в stdout, я привык несколько раз нажать Enter, чтобы визуально отделить вывод флудящей утилиты.
Но чуть ниже стоит блок

read -p 'Continue? [Y/n] ' yn
case $yn in
    "" ) break;;
    [Yy]* ) break;;
    [Nn]* ) exit 0;;
    * ) echo "Выберите yes или no.";;
esac
который принимает введенный Enter и соответственно присваивает $yn пустое значение. И проблема собственно в том, что получается, что ввод до запроса автоматически становится ответом на этот запрос.

Можно ли этого избежать? Или возможно есть другой способ дождаться вопроса и только после этого читать ввод?

Сразу оговорюсь что добавить 100500 пустых echo - не вариант. Дело именно в самой логике поведения.

Вообще-то ЕМНИП всегда так было. Еще со времён DOS. И это не read, это любая программа, если в ней не предусмотрена очистка буфера клавиатуры перед вводом.

А избежать просто - не трактуй пустое значение корректным вводом от пользователя.

Kroz ★★★★★
()
29 августа 2017 г.
31 октября 2017 г.
Ответ на: комментарий от MikeWortin

Нет. Смысл большой буквы в [Y/n] в значении по умолчанию. Т.е. по умолчанию Y, однако не хотелось бы чтоб оно реагировало раньше чем спросит..

ilmenshik
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.