Получение ввода юзера в bash
read
read читает строку из STDIN или файлового дескриптора, записывает слова в список переменных или в переменную-массив (список).
Самые полезные ключи (-eip
):
-p
— выводит приглашение к вводу-i
— указание значения по умолчанию-e
— позволяет юзать возможности библиотеки Readline
например, навигация по строке клавишами со стрелками для редактирования значения по умолчанию перед его подтверждением-s
— позволяет запрашивать пароли без отображения вводимых символов на экране
Использование редактируемого значения по умолчанию:
Пример запроса ввода пароля:
Реализация "Press any key to continue"
В скриптах на скорую руку (нет ничего более постоянного, чем “временное”) можно такую штуку сделать:
Иногда может понадобиться явно указывать откуда читать клавиши. Например, в некоторых случаях + в конструкции
while > if
может не срабатыватьread
, поэтому нужно настроить явное чтение клавиш с терминала с помощью/dev/tty
:
Поддержка тайм-аута отлично подходит для запроса ввода дополнительных данных, позволяя не «подвесить» сценарий, если пользователю нечего ввести.
Запрос ввода с таймаутом:
pause
Была старая команда pause
в DOS/Windows. В bash можно сымитировать ее так:
select
Команда
select
создает простое меню и позволяет сделать выбор. Можно еще добавить в меню пункты для выхода или отмены.
Похожий инструмент с возможностями побольше - dialog (но это не идиома bash).
Пример создания меню из ~/.ssh/config
для выбора целевого хоста ssh_target и подключения к нему:
Соус: Книга “Идиомы Bash” ⇒ Глава 10. “Помимо идиом: работа с bash” ⇒ “Получение ввода пользователя”