Naciśnij enter lub poczekaj 10 sekund, aby kontynuować

Mogę poprosić użytkownika, aby nacisnął Enter używając read i kazał czekać, dzwoniąc sleep. Ale nie mogę wymyślić sposobu na robienie obu w tym samym czasie. Chciałbym, aby użytkownik otrzymał wybór:

Naciśnij Ctrl+C Aby anulować, wpisz Aby kontynuować lub po prostu odczekaj 10 sekund

Jak mogę to zrobić?
Author: SDsolar, 2012-02-28

3 answers

W bash, read posiada opcję -t, w której można określić limit czasu. Ze strony Man:

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

-t timeout: powoduje odczyt do time out i zwraca failure, jeśli pełna linia wejściowa nie zostanie odczytana w ciągu sekund timeout. Opcja ta nie ma wpływu, jeśli read nie jest odczytem wejścia z terminala lub rury.

Zapis poniżej (bez wciśnięcia 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

Kolejny, wciskając ENTER po kilku sekundach:

$ 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

I kolejny, uderzający 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
 101
Author: paxdiablo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-28 14:31:55

Wbudowany read ma limit czasu.

read -t 10

Zrobi to

 15
Author: Johannes Weiss,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-28 14:25:34

Z podręcznika referencyjnego bash :

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

 1
Author: Benoit,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-28 14:27:25