Wie verwende ich Bash Read mit einer Zeitüberschreitung?


71

Ich kann den Benutzer zu drücken frage Enterunter Verwendung read, und er durch den Aufruf warten sleep. Aber ich kann mir keine Möglichkeit vorstellen, beides gleichzeitig zu tun. Ich möchte, dass der Benutzer die Wahl hat:

Drücken Sie Ctrl+, Cum abzubrechen, Enter um fortzufahren, oder warten Sie nur 10 Sekunden

Wie kann ich das machen?

Antworten:


136

In bash, readhat eine -tOption , 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

6
Ich finde es absolut toll, wenn so detaillierte Antworten gegeben werden. Hut ab!
Brian

Ubuntu. -t - illegale Option
ses

@ses, stellen Sie sicher, dass Sie das eingebaute Bash verwenden, kein externes Tool.
Paxdiablo

Wenn Sie ein Shell-Skript schreiben, stellen Sie sicher, dass es mit einem #!/bin/bashanstelle von beginnt #!/bin/sh. Letzteres kann funktionieren oder auch nicht, je nachdem, welche Binärdatei /bin/shtatsächlich ist. Sie dürfen #!/bin/shgenau dann schreiben, wenn Ihr Skript POSIX-kompatibel ist, was es ziemlich sicher nicht ist.
Mikko Rantalainen

Wenn Sie dies verwenden, stellen Sie sicher, dass Ihr Skript #!/bin/bashnicht ist #!/bin/sh, da die -tOption nicht POSIX-kompatibel ist (obwohl das Skript möglicherweise nicht auf jedem Computer funktioniert)
Marian


Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.