Подтвердить что ты не робот

Нажмите enter или подождите 10 секунд, чтобы продолжить

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

Нажмите Ctrl + C для отмены, Enter для продолжения или просто подождите 10 секунд

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

4b9b3361

Ответ 1

В bash параметр read имеет параметр -t, где вы можете указать тайм-аут. С manpage:

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 через пару секунд:

$ 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

Ответ 2

Встроенный read имеет тайм-аут.

read -t 10

сделает это

Ответ 3

Из справочного руководства bash:

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