read читает строку из stdin или файлового дескриптора, записывает слова в список переменных или в переменную-массив (список).
Useful keys
Key
Explain
-p
выводит приглашение к вводу
-i
указание значения по умолчанию
-e
позволяет юзать возможности библиотеки Readline. Например, навигация по строке клавишами со стрелками для редактирования значения по умолчанию перед его подтверждением
-s
позволяет запрашивать пароли без отображения вводимых символов на экране
Использование редактируемого значения по умолчанию:
read -ei 'default value' -p 'Enter something: '# Enter something: changed: default valueecho $REPLY# changed: default value
Пример запроса ввода пароля:
read -sp 'Enter the secret password: ' ; \ echo -e "\n\n, the password is: ~$REPLY~"# Enter the secret password:# the password is: ~super secret~
Реализация "Press any key to continue" в bash
Была старая команда pause в DOS/Windows. В bash можно сымитировать ее так.
read -n1 -p 'CTRL-C to abort or any other key to continue...'
Иногда может понадобиться явно указывать откуда читать клавиши. Например, в некоторых случаях + в конструкции while > if может не срабатывать read, поэтому нужно настроить явное чтение клавиш с терминала с помощью /dev/tty:
read -rsn1 -p '' < /dev/tty
Поддержка тайм-аута отлично подходит для запроса ввода дополнительных данных, позволяя не «подвесить» сценарий, если пользователю нечего ввести.
Запрос ввода с таймаутом:
time read -t 4 -p "Are you there?"# Are you there?# real 0m4.000s# user 0m0.000s# sys 0m0.000s
Команда selectсоздает простое меню и позволяет сделать выбор. Можно еще добавить в меню пункты для выхода или отмены.
Похожий инструмент с возможностями побольше - dialog (но это не идиома bash).
Пример создания меню из ~/.ssh/config для выбора целевого хоста ssh_target и подключения к нему: