2012-02-28 32 views
46

Puedo pedirle al usuario que presione Ingrese usando read, y haga que espere llamando al sleep. Pero no puedo pensar en una forma de hacer ambas cosas al mismo tiempo. Me gustaría que el usuario se le da la opción:Presione enter o espere 10 segundos para continuar

Prensa Ctrl +C de cancelar, Introduzca para continuar o simplemente espere 10 segundos

¿Cómo puedo hacer eso?

Respuesta

89

En bash, read tiene una opción -t donde se puede especificar un tiempo de espera. Desde la página de manual:

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

-t timeout: causa leer el tiempo de espera y el fracaso regreso si una línea completa de entrada no se lee en cuestión de segundos de tiempo de espera. Esta opción no tiene efecto si la lectura no está leyendo la entrada del terminal o una tubería.

Transcripción siguiente (sin oprimir la tecla 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 

Otro, oprimir la tecla Enter después de un par de segundos:

$ 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 

Y otro, pulsando 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 
+4

Me encanta cuando se dan respuestas detalladas como esta. ¡Felicitaciones a usted! – Brian

+0

ubuntu. -t - opción ilegal – ses

+0

@ses, asegúrese de estar utilizando el bash incorporado, no una herramienta externa. – paxdiablo

13

El read tiene un tiempo de espera agotado.

read -t 10 

lo hará

1

Desde bash reference manual:

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

Cuestiones relacionadas