Cela a fonctionné pour moi sur plusieurs versions de Linux, là où certaines de ces autres solutions ne fonctionnaient pas (y compris les plus populaires ici). Je pense que c'est plus lisible aussi...
echo Press enter to continue; read dummy;
Notez qu'une variable doit être fournie en tant qu'argument de read
.
J'utilise beaucoup ces moyens qui sont très courts, et ils sont comme les solutions @theunamedguy et @Jim, mais avec le timeout et le mode silencieux en plus.
J'aime particulièrement le dernier cas et je l'utilise dans de nombreux scripts qui s'exécutent en boucle jusqu'à ce que l'utilisateur appuie sur Entrée .
Commandes
-
Saisir la solution
read -rsp $'Press enter to continue...\n'
-
Solution d'évasion (avec -d $'\e')
read -rsp $'Press escape to continue...\n' -d $'\e'
-
Toute solution clé (avec -n 1)
read -rsp $'Press any key to continue...\n' -n 1 key # echo $key
-
Question avec choix présélectionné (avec -ei $'Y')
read -rp $'Are you sure (Y/n) : ' -ei $'Y' key; # echo $key
-
Solution de dépassement de délai (avec -t 5)
read -rsp $'Press any key or wait 5 seconds to continue...\n' -n 1 -t 5;
-
Alias de sommeil amélioré
read -rst 0.5; timeout=$? # echo $timeout
Explication
-r spécifie le mode brut, qui n'autorise pas les caractères combinés comme "\" ou "^".
-s spécifie le mode silencieux, et parce que nous n'avons pas besoin de la sortie du clavier.
-p $'invite ' spécifie l'invite, qui doit être comprise entre $' et ' pour laisser les espaces et les caractères d'échappement. Attention, vous devez mettre entre guillemets simples avec le symbole dollars pour favoriser les caractères échappés, sinon vous pouvez utiliser des guillemets simples.
-d $'\e ' spécifie escappe comme caractère délimiteur, donc comme caractère final pour l'entrée en cours, il est possible de mettre n'importe quel caractère mais attention à mettre un caractère que l'utilisateur peut taper.
-n 1 spécifie qu'il n'a besoin que d'un seul caractère.
-e spécifie le mode readline.
-i $'Y ' spécifie Y comme texte initial en mode readline.
-t 5 spécifie un délai d'attente de 5 secondes
clé servir au cas où vous auriez besoin de connaître l'entrée, dans le cas -n1, la touche qui a été enfoncée.
$ ? servent à connaître le code de sortie du dernier programme, en lecture, 142 en cas de timeout, 0 entrée correcte. Mettre $ ? dans une variable dès que possible si vous avez besoin de la tester après quelques commandes, car toutes les commandes réécriraient $?
read
fait ceci :
[email protected]:~$ read -n1 -r -p "Press any key to continue..." key
[...]
[email protected]:~$
Le -n1
spécifie qu'il n'attend qu'un seul caractère. Le -r
le met en mode brut, ce qui est nécessaire car sinon, si vous appuyez sur quelque chose comme une barre oblique inverse, il ne s'enregistrera pas tant que vous n'appuierez pas sur la touche suivante. Le -p
spécifie l'invite, qui doit être entre guillemets si elle contient des espaces. Le key
l'argument n'est nécessaire que si vous voulez savoir sur quelle touche ils ont appuyé, auquel cas vous pouvez y accéder via $key
.
Si vous utilisez Bash, vous pouvez également spécifier un délai d'attente avec -t
, ce qui fait que read renvoie un échec lorsqu'une touche n'est pas enfoncée. Ainsi, par exemple :
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
sans aucun paramètre ne continuera que si vous appuyez sur Entrée. Le DOS pause
La commande continuera si vous appuyez sur n'importe quelle touche. Utilisez read –n1
si vous voulez ce comportement.