web-dev-qa-db-fra.com

Quel est l'équivalent bash de la commande pause du DOS?

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
[...]
13
th3pr0ph3t

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
10
Huckle

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
2
Elder Geek

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 saisie

Je 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! :)

1
John Landells

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"
0
ptwolny