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


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

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

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

3   51  

3 ответа:

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

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

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

расшифровка ниже (без нажатия 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

The read builtin имеет тайм-аут.

read -t 10

сделаем это

С справочное руководство bash:

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