Как использовать Bash read с таймаутом? - PullRequest
63 голосов
/ 28 февраля 2012

Я могу попросить пользователя нажать Введите , используя read, и попросить его подождать, позвонив sleep. Но я не могу придумать, как сделать это одновременно. Я бы хотел, чтобы пользователю был предоставлен выбор:

Нажмите Ctrl + C для отмены, Введите , чтобы продолжить или просто подождите 10 секунд

Как я могу это сделать?

Ответы [ 3 ]

116 голосов
/ 28 февраля 2012

В bash, read есть опция -t, в которой можно указать время ожидания.Из справочной страницы:

read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...]

-t timeout: вызывает чтение для тайм-аута и возвращает ошибку, если полная строка ввода не считывается в течение секунд ожидания.Эта опция не действует, если чтение не читает входные данные из терминала или канала.

Стенограмма ниже (без нажатия ENTER):

$ date ; read -t 10 -p "Hit ENTER or wait ten seconds" ; echo ; date
Tue Feb 28 22:29:15 WAST 2012
Hit ENTER or wait ten seconds
Tue Feb 28 22:29:25 WAST 2012

Другой, нажав ENTER после aпара секунд:

$ date ; read -t 10 -p "Hit ENTER or wait ten seconds" ; date
Tue Feb 28 22:30:17 WAST 2012
Hit ENTER or wait ten seconds
Tue Feb 28 22:30:19 WAST 2012

и еще один, нажав CTRL-C:

$ date ; read -t 10 -p "Hit ENTER or wait ten seconds" ; echo ; date
Tue Feb 28 22:30:29 WAST 2012
Hit ENTER or wait ten seconds
15 голосов
/ 28 февраля 2012

Встроенный read имеет время ожидания.

read -t 10

сделает это

1 голос
/ 28 февраля 2012

Из справочника bash :

read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p prompt][-t timeout][-u fd] [name ...]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...