Книга: Искусство программирования на языке сценариев командной оболочки
Пример 9-3. Еще один пример ограничения времени ожидания ввода от пользователя
Пример 9-3. Еще один пример ограничения времени ожидания ввода от пользователя
#!/bin/bash
# timeout.sh
# Автор: Stephane Chazelas,
# дополнен автором документа.
INTERVAL=5 # предел времени ожидания
timedout_read() {
timeout=$1
varname=$2
old_tty_settings=`stty -g`
stty -icanon min 0 time ${timeout}0
eval read $varname # или просто read $varname
stty "$old_tty_settings"
# См. man stty.
}
echo; echo -n "Как Вас зовут? Отвечайте быстрее! "
timedout_read $INTERVAL your_name
# Такой прием может не работать на некоторых типах терминалов.
# Максимальное время ожидания зависит от терминала.
# (чаще всего это 25.5 секунд).
echo
if [ ! -z "$your_name" ] # Если имя было введено...
then
echo "Вас зовут $your_name."
else
echo "Вы не успели ответить."
fi
echo
# Алгоритм работы этого сценария отличается от "timed-input.sh".
# Каждое нажатие на клавишу вызывает сброс счетчика в начальное состояние.
exit 0
Возможно самый простой способ -- использовать опцию -t команды read.
- Пример 9-1. $IFS и пробельные символы
- Пример 9-2. Ограничения времени ожидания ввода
- Пример 9-3. Еще один пример ограничения времени ожидания ввода от пользователя
- Пример 9-4. Ограничение времени ожидания команды read
- Пример 9-5. Я -- root?
- Пример 9-6. arglist: Вывод списка аргументов с помощью переменных $* и $@
- Пример 9-7. Противоречия в переменных $* и $@
- Пример 9-8. Содержимое $* и $@, когда переменная $IFS -- пуста
- Пример 9-9. Переменная "подчеркивание"
- Пример установочного скрипта
- Пример из практики
- Листинг 10.1. (simpleid.c) Отображение идентификаторов пользователя и группы
- Сохранение информации о пользователях при миграции
- 1.1.4. Еще немного терминов
- ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ
- HR-брендинг: Работа с поколением Y, новые инструменты для коммуникации, развитие корпоративной культуры и еще 9 эффектив...
- Уменьшение времени, необходимого для резервного копирования и восстановления
- Реальный (RID) и эффективный (EUID) идентификаторы пользователя
- Ограничение времени ожидания для транзакций (Lock timeout)
- Примеры получения статистики
- Пример применения метода «пять почему»