Questo ha funzionato per me su più versioni di Linux, dove alcune di queste altre soluzioni non funzionavano (comprese quelle più popolari qui). Penso che sia anche più leggibile...
echo Press enter to continue; read dummy;
Nota che una variabile deve essere fornita come argomento a read
.
Uso molto questi modi che sono molto brevi e sono come le soluzioni @theunamedguy e @Jim, ma con timeout e modalità silenziosa in aggiunta.
Mi piace particolarmente l'ultimo caso e lo uso in molti script che vengono eseguiti in loop finché l'utente non preme Invio .
Comandi
-
Inserisci soluzione
read -rsp $'Press enter to continue...\n'
-
Soluzione di fuga (con -d $'\e')
read -rsp $'Press escape to continue...\n' -d $'\e'
-
Qualsiasi soluzione chiave (con -n 1)
read -rsp $'Press any key to continue...\n' -n 1 key # echo $key
-
Domanda con scelta preselezionata (con -ei $'Y')
read -rp $'Are you sure (Y/n) : ' -ei $'Y' key; # echo $key
-
Soluzione timeout (con -t 5)
read -rsp $'Press any key or wait 5 seconds to continue...\n' -n 1 -t 5;
-
Alias Sleep migliorato
read -rst 0.5; timeout=$? # echo $timeout
Spiegazione
-r specifica la modalità raw, che non consente caratteri combinati come "\" o "^".
-s specifica la modalità silenziosa e perché non abbiamo bisogno dell'output della tastiera.
-p $'richiesta ' specifica il prompt, che deve essere compreso tra $' e ' per consentire spazi e caratteri di escape. Fai attenzione, devi mettere tra virgolette singole con il simbolo del dollaro per beneficiare dei caratteri di escape, altrimenti puoi usare le virgolette semplici.
-d $'\e ' specifica l'escappe come carattere delimitatore, quindi come carattere finale per l'immissione corrente, è possibile inserire qualsiasi carattere ma fai attenzione a inserire un carattere che l'utente può digitare.
-n 1 specifica che necessita solo di un singolo carattere.
-e specifica la modalità readline.
-i $'Y ' specifica Y come testo iniziale in modalità readline.
-t 5 specifica un timeout di 5 secondi
chiave serve nel caso tu abbia bisogno di conoscere l'input, nel caso -n1, il tasto che è stato premuto.
$? serve per conoscere il codice di uscita dell'ultimo programma, per read, 142 in caso di timeout, 0 input corretto. Metti $? in una variabile il prima possibile se hai bisogno di testarla dopo alcuni comandi, perché tutti i comandi riscriverebbero $?
read
fa questo:
[email protected]:~$ read -n1 -r -p "Press any key to continue..." key
[...]
[email protected]:~$
Il -n1
specifica che attende solo un singolo carattere. Il -r
lo mette in modalità raw, che è necessaria perché altrimenti, se premi qualcosa come una barra rovesciata, non si registra fino a quando non premi il tasto successivo. Il -p
specifica il prompt, che deve essere quotato se contiene spazi. Il key
argomento è necessario solo se vuoi sapere quale tasto hanno premuto, nel qual caso puoi accedervi tramite $key
.
Se stai usando Bash, puoi anche specificare un timeout con -t
, che fa in modo che read restituisca un errore quando non viene premuto un tasto. Quindi, ad esempio:
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
senza alcun parametro continuerà solo se si preme invio. Il DOS pause
comando continuerà se si preme un tasto qualsiasi. Usa read –n1
se vuoi questo comportamento.