J'ai besoin d'une pause sur un script shell pour afficher un avertissement avant de continuer. Par exemple, sous DOS, cela se passe comme suit:
doit.bat:
[...]
echo 'Are you sure? Press Ctrl-C to abort, enter to continue.'
pause
[...]
Comment puis-je faire cela sur bash? Pour le moment, une commande sleep semble faire l'affaire et est assez simple mais ce n'est pas exactement l'idée:
doit.sh
[...]
echo 'Are you sure? Press Ctrl-C to abort.'
sleep 3
[...]
Réponses:
quelque chose le long des lignes de
la source
read -p "prompt"
. Plus de détails sur les commandes intégrées au shell peuvent être récupérés avec lahelp
commande, par exemplehelp read
.echo -n
etprintf
. Si vous appuyez sur Entrée, vous obtiendrez une nouvelle ligne.bash
il n'est pas nécessaire que read ait un argument. L'utilisationsh
(qui invoque souventbash
ensh
mode compatible)read
nécessite un argument. Si vous commencez votre script avec#!/bin/sh
vous verrez ce dernier comportementread -p "Press any key to continue or CTRL-C to abort"
fonctionne très bien sous 14.04 dans mes scripts. Comme @Lekensteyn l'a déclaré dans le commentaire ci-dessus, il semble que ce soit le cas depuis le 12.04.4. La page «aide à la lecture» indique:la source
Mon utilisation préférée est de définir un délai d'expiration par défaut, afin que le script puisse également s'exécuter sans surveillance:
où:
-n1
indique à la lecture d'accepter n'importe quel caractère-t5
lui dit d'attendre un maximum de 5 secondes pour l'entréeJe travaille presque exclusivement avec Bash sous CentOS, donc je ne peux pas garantir que cela fonctionne sur d'autres variantes de Linux, mais comme c'est Bash, je m'attendrais à ce que cela fonctionne. J'aimerais savoir avec certitude si c'est le cas! :)
la source
La simple attente pour arrêter le script est d'appeler à
kill -STOP $$
partir du script: après une pause, le script continuera son travail après avoir reçu le signal -CONT.la source
CONT
signal au script?placer ces 3 lignes dans un fichier .sh et l'exécuter
la source
echo
commande ne s'afficherait-elle pas et qu'est-ce que cela a à voir avec la vitesse de l'ordinateur?