2012-02-28 20 views
46

Mogę poprosić użytkownika o naciśnięcie klawisza Wpisz za pomocą read i każ mu czekać, dzwoniąc pod numer sleep. Ale nie mogę wymyślić sposobu robienia obu naraz. Chciałbym użytkownika, aby mieć możliwość wyboru:Naciśnij enter lub poczekaj 10 sekund, aby kontynuować.

Prasa Ctrl + C anulować, Enter aby kontynuować, lub po prostu odczekać 10 sekund

W jaki sposób można to zrobić?

Odpowiedz

89

W bash, read posiada opcję -t którym można określić limit czasu. Z podręcznika:

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

-t timeout: przyczyną czytać do czasu wyjścia i powrotu niepowodzenie jeśli kompletna linia wejścia nie jest odczytywany w ciągu TIMEOUT s. Ta opcja nie ma zastosowania, jeśli odczyt nie odczytuje danych wejściowych z terminala lub potoku.

Transkrypcja poniżej (bez uderzania 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 

Innym, naciskając klawisz 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 jeszcze, trafiając 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

Absolutnie kocham go, gdy szczegółowe odpowiedzi, jak to podano. Kudos do ciebie! – Brian

+0

ubuntu. -t - nielegalna opcja – ses

+0

@ses, upewnij się, że używasz wbudowanego basha, a nie jakiegoś zewnętrznego narzędzia. – paxdiablo

13

Wbudowany zegar ma limit czasu.

read -t 10 

zrobi to

Powiązane problemy