Comment puis-je arrêter un script bash jusqu'à ce qu'un utilisateur ait appuyé Space?
J'aimerais avoir la question dans mon script
Appuyez sur espace pour continuer ou sur CTRL+ Cpour quitter
et alors le script devrait s'arrêter et attendre jusqu'à ce que vous appuyiez sur Space.
bash
control-flow
rubo77
la source
la source
Réponses:
Vous pouvez utiliser
read
:la source
read -n1 -rsp $'Press any key to continue or Ctrl+C to exit...\n'
else
bloc est toujours exécuté, même lorsque la barre d'espace est enfoncée.bash
. Cela fonctionne si vous utilisez à laread _
place, si vous avez un autre shell quebash
.''
contenir un espace à l'intérieur?''
pour une chaîne vide. Pas d'espace à l'intérieur. Je suppose que ça va aussi, si vous entrez ENTER ou TABLa méthode décrite dans ce SO Q & R est probablement le meilleur candidat pour une alternative au
pause
comportement auquel vous êtes habitué sous Windows lorsque vous créez des fichiers BAT.Exemple
Ici, je lance ce qui précède et appuie simplement sur n’importe quelle touche, dans ce cas la Dtouche.
Références
la source
$
avant la chaîne ici-rsp $'Press
:?echo -e "..."
lignes supplémentaires . C'est beaucoup plus compact dans ces situations.Ceci imprime maintenant une invite sans fin de ligne, gère de
CTRL+C
manière fiable, appellestty
seulement aussi souvent que nécessaire et restaure le tty de contrôle à exactement l'état dans lequelstty
il l'a trouvé. Recherchezman stty
des informations sur la manière de contrôler explicitement les échos, les caractères de contrôle, etc.Vous pourriez aussi faire ceci:
Vous pouvez le faire avec
ENTER
, pas de[
test]
et passtty
comme:la source
Vous pouvez créer une fonction pour cela:
Ensuite, vous pouvez l'utiliser partout dans votre script:
la source
paresseux one liner:
l'inconvénient est que vous perdez le contrôle lorsque l'utilisateur appuie sur ctrl + c. Le script se terminera toujours avec le code 130 dans ce cas.
la source
Les paramètres
IFS
permettant de vider la chaîne suppriment le comportement par défaut de la délimitation des blancs en lecture.MISE À JOUR 2018-05-23: Nous pouvons simplifier cela en utilisant la variable REPLY, qui n'est pas sujette au fractionnement de mots:
la source
Voici un moyen qui fonctionne à la fois
bash
etzsh
et qui assure les E / S vers le terminal:Mettez-le dans votre
.{ba,z}shrc
pour la grande justice!la source