J'ai besoin d'une pause sur un script shell pour afficher un avertissement avant de continuer. Par exemple, sous DOS, cela ressemble à ceci:
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 de sommeil 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
[...]
quelque chose le long des lignes de
echo -n "Prompt" #'-n' means do not add \n to end of string
read # No arg means dump next line of input
read -p "Press any key to continue or CTRL-C to abort"
fonctionne 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 d'aide lue indique:
-p Prompt output the string Prompt without a trailing newline before
attempting to read
Mon utilisation préférée est de définir un délai d’expiration par défaut, afin que le script puisse également être exécuté sans surveillance:
echo "Press any key to continue..."
read -n1 -t5 any_key
où:
-n1
indique à la lecture d'accepter n'importe quel caractère-t5
lui dit d'attendre 5 secondes maximum pour la saisieJe travaille presque exclusivement avec Bash sous CentOS, je ne peux donc pas en garantir le fonctionnement sur d’autres variantes de Linux, mais comme il s’agit de Bash, j’espérerais que cela fonctionne. J'aimerais savoir avec certitude si c'est le cas! :)
L'attente simple pour arrêter le script consiste à appeler kill -STOP $$
à partir du script: après une pause, le script continuera son travail après la réception du signal -CONT.
#!/bin/bash
echo "$0 stopping now"
kill -STOP $$
echo "$0 continues its work"