In bash
, read
hat eine -t
Option , wo Sie ein Timeout angeben. Aus der Manpage:
read [-ers] [-u fd] [-t timeout] [-a aname] [-p prompt] [-n nchars] [-d delim] [name ...]
-t timeout:
Zeitüberschreitung beim Lesen verursachen und Fehler zurückgeben, wenn eine vollständige Eingabezeile nicht innerhalb von Zeitüberschreitungssekunden gelesen wird. Diese Option hat keine Auswirkung, wenn beim Lesen keine Eingaben vom Terminal oder einer Pipe gelesen werden.
Transkript unten (ohne ENTER zu drücken):
$ 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
Ein anderer, der nach ein paar Sekunden ENTER drückt:
$ 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
Und noch eine, die STRG-C drückt:
$ 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
#!/bin/bash
anstelle von beginnt#!/bin/sh
. Letzteres kann funktionieren oder auch nicht, je nachdem, welche Binärdatei/bin/sh
tatsächlich ist. Sie dürfen#!/bin/sh
genau dann schreiben, wenn Ihr Skript POSIX-kompatibel ist, was es ziemlich sicher nicht ist.#!/bin/bash
nicht ist#!/bin/sh
, da die-t
Option nicht POSIX-kompatibel ist (obwohl das Skript möglicherweise nicht auf jedem Computer funktioniert)Das
read
eingebaute hat eine Zeitüberschreitung.read -t 10
werde es tun
quelle
Aus dem Bash-Referenzhandbuch :
quelle