Je peux demander à l'utilisateur d'appuyer sur Enter en utilisant read
, et lui faire attendre en appelant sleep
. Mais je ne peux pas penser à une façon de faire les deux en même temps. J'aimerais que l'utilisateur ait le choix:
Presse Ctrl+C annuler, Enterpour continuer ou juste attendre 10 secondes
Comment puis je faire ça?
Dans bash
, read
a un -t
option où vous pouvez spécifier un délai. Depuis la page de manuel:
read [-ers] [-u fd] [-t timeout] [-a aname] [-p Prompt] [-n nchars] [-d delim] [name ...]
-t timeout:
provoque la fin du délai de lecture et l'échec du retour si une ligne complète d'entrée n'est pas lue dans les secondes de délai. Cette option n'a aucun effet si read ne lit pas l'entrée du terminal ou d'un tuyau.
Transcription ci-dessous (sans appuyer sur 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
Un autre, en appuyant sur ENTER après quelques secondes:
$ 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
Et un autre, frapper 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
La fonction intégrée read
a un délai d'expiration.
read -t 10
le fera
Depuis le manuel de référence bash :
read [-ers] [-a aname] [-d delim] [-i text] [-n nchars] [-N nchars] [-p Prompt]
[-t timeout]
[-u fd] [name ...]