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

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

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

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


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"

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


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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.