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

13

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
[...]
th3pr0ph3t
la source
Duplication possible de Quel est l'équivalent Linux d'une pause DOS?
MiFreidgeim SO-stop étant maléfique

Réponses:

10

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
Huckle
la source
14
Dans Bash, cela peut être raccourci read -p "prompt". Plus de détails sur les commandes intégrées au shell peuvent être récupérés avec la helpcommande, par exemple help read.
Lekensteyn
@Lekensteyn - Ce n'est cependant pas un retour à la ligne.
Matt H
@MattH Tout comme echo -net printf. Si vous appuyez sur Entrée, vous obtiendrez une nouvelle ligne.
Lekensteyn
cela ne fonctionne pas pour ubuntu 12.04 - lire requiert argumenst
ses
@ses Sur 12.04.4, bashil n'est pas nécessaire que read ait un argument. L'utilisation sh(qui invoque souvent bashen shmode compatible) readnécessite un argument. Si vous commencez votre script avec #!/bin/shvous verrez ce dernier comportement
Huckle
2

read -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:

-p prompt   output the string PROMPT without a trailing newline before
            attempting to read
Elder Geek
la source
1

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:

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 un maximum de 5 secondes pour l'entrée

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

John Landells
la source
0

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.

#!/bin/bash
echo "$0 stopping now"
kill -STOP $$
echo "$0 continues its work"
ptwolny
la source
Comment envoie-t-on le CONTsignal au script?
David Foerster
-2
echo "press enter to continue"
read unusedVariable
echo "running these 3 lines in .sh file, this echo will never be seen, unless you have a really slow computer"

placer ces 3 lignes dans un fichier .sh et l'exécuter

Puis Enok
la source
1
-1 Qu'est-ce que cela est censé faire et pourquoi? Pourquoi la sortie de la dernière echocommande ne s'afficherait-elle pas et qu'est-ce que cela a à voir avec la vitesse de l'ordinateur?
David Foerster