Dies funktionierte für mich auf mehreren Linux-Varianten, wo einige dieser anderen Lösungen dies nicht taten (einschließlich der beliebtesten hier). Ich denke, es ist auch besser lesbar...
echo Press enter to continue; read dummy;
Beachten Sie, dass eine Variable als Argument für read
bereitgestellt werden muss .
Ich verwende diese Wege oft, die sehr kurz sind, und sie sind wie @theunamedguy- und @Jim-Lösungen, aber zusätzlich mit Timeout und Silent-Modus.
Ich liebe besonders den letzten Fall und verwende ihn in vielen Skripten, die in einer Schleife laufen, bis der Benutzer Enter drückt .
Befehle
-
Lösung eingeben
read -rsp $'Press enter to continue...\n'
-
Escape-Lösung (mit -d $'\e')
read -rsp $'Press escape to continue...\n' -d $'\e'
-
Jede Schlüssellösung (mit -n 1)
read -rsp $'Press any key to continue...\n' -n 1 key # echo $key
-
Frage mit Vorauswahl (mit -ei $'Y')
read -rp $'Are you sure (Y/n) : ' -ei $'Y' key; # echo $key
-
Timeout-Lösung (mit -t 5)
read -rsp $'Press any key or wait 5 seconds to continue...\n' -n 1 -t 5;
-
Sleep-erweiterter Alias
read -rst 0.5; timeout=$? # echo $timeout
Erklärung
-r gibt den Raw-Modus an, der keine kombinierten Zeichen wie "\" oder "^" zulässt.
-s den stillen Modus angibt, und weil wir keine Tastaturausgabe benötigen.
-p $'Eingabeaufforderung ' gibt die Eingabeaufforderung an, die zwischen $' und ' liegen muss, um Leerzeichen und Escape-Zeichen zuzulassen. Seien Sie vorsichtig, Sie müssen einfache Anführungszeichen mit dem Dollarsymbol setzen, um Escape-Zeichen zu nutzen, andernfalls können Sie einfache Anführungszeichen verwenden.
-d $'\e ' gibt escappe als Trennzeichen an, so dass als letztes Zeichen für den aktuellen Eintrag jedes beliebige Zeichen verwendet werden kann, aber achten Sie darauf, ein Zeichen zu verwenden, das der Benutzer eingeben kann.
-n 1 gibt an, dass nur ein einziges Zeichen benötigt wird.
-e gibt den Readline-Modus an.
-i $'Y ' gibt Y als Anfangstext im Readline-Modus an.
-t 5 spezifiziert ein Timeout von 5 Sekunden
Schlüssel dienen, falls Sie die Eingabe kennen müssen, im Fall von -n1 die Taste, die gedrückt wurde.
$? dienen dazu, den Exit-Code des letzten Programms zu kennen, zum Lesen, 142 bei Timeout, 0 richtige Eingabe. $ setzen? so schnell wie möglich in eine Variable, wenn Sie es nach einigen Befehlen testen müssen, da alle Befehle $?
neu schreiben würden
read
tut dies:
[email protected]:~$ read -n1 -r -p "Press any key to continue..." key
[...]
[email protected]:~$
Die -n1
gibt an, dass nur auf ein einzelnes Zeichen gewartet wird. Die -r
versetzt es in den Raw-Modus, was notwendig ist, da es sonst nicht registriert wird, wenn Sie so etwas wie einen Backslash drücken, bis Sie die nächste Taste drücken. Die -p
gibt die Eingabeaufforderung an, die in Anführungszeichen gesetzt werden muss, wenn sie Leerzeichen enthält. Die key
Das Argument ist nur erforderlich, wenn Sie wissen möchten, welche Taste sie gedrückt haben. In diesem Fall können Sie über $key
darauf zugreifen .
Wenn Sie Bash verwenden, können Sie auch mit -t
ein Timeout angeben , was dazu führt, dass read einen Fehler zurückgibt, wenn eine Taste nicht gedrückt wird. Also zum Beispiel:
read -t5 -n1 -r -p 'Press any key in the next five seconds...' key
if [ "$?" -eq "0" ]; then
echo 'A key was pressed.'
else
echo 'No key was pressed.'
fi
read
ohne Parameter wird nur fortgesetzt, wenn Sie die Eingabetaste drücken. Das DOS pause
Der Befehl wird fortgesetzt, wenn Sie eine beliebige Taste drücken. Verwenden Sie read –n1
wenn Sie dieses Verhalten wünschen.