¿Cuál es el equivalente bash del comando de pausa de DOS?


13

Necesito una pausa en un script de shell para mostrar una advertencia antes de continuar. Por ejemplo, en DOS es así:

doit.bat:

[...]
echo 'Are you sure? Press Ctrl-C to abort, enter to continue.'
pause
[...]

¿Cómo puedo hacer esto en bash? Por el momento, un comando de suspensión parece hacer el truco y es lo suficientemente simple, pero no es exactamente la idea:

doit.sh

[...]
echo 'Are you sure? Press Ctrl-C to abort.'
sleep 3
[...]

Respuestas:


10

algo en la línea de

echo -n "prompt"  #'-n' means do not add \n to end of string
read              # No arg means dump next line of input

14
En Bash, esto se puede acortar a read -p "prompt". Se pueden recuperar más detalles sobre las funciones integradas de shell con el helpcomando, por ejemplo help read.
Lekensteyn

@Lekensteyn: sin embargo, eso es sin una nueva línea final.
Matt H

@MattH Al igual que echo -ny printf. Si presiona Enter, obtendrá una nueva línea.
Lekensteyn

eso no funciona para Ubuntu 12.04 - leer requiere argumentos
ses

@ses En 12.04.4 usando bashno hay ningún requisito de que leer tenga un argumento. El uso sh(que a menudo invoca bashen shmodo compatible) readrequiere un argumento. Si comienza su secuencia de comandos #!/bin/shverá el último comportamiento
Huckle

2

read -p "Press any key to continue or CTRL-C to abort"funciona bien bajo 14.04 en mis scripts. Como @Lekensteyn declaró en el comentario anterior, parece que este ha sido el caso desde el 12.04.4. La página de 'ayuda para leer' dice:

-p prompt   output the string PROMPT without a trailing newline before
            attempting to read

1

Mi uso favorito de esto es establecer un tiempo de espera predeterminado, para que el script también pueda ejecutarse desatendido:

echo "Press any key to continue..."
read -n1 -t5 any_key

dónde:

  • -n1 le dice a la lectura que acepte cualquier carácter individual
  • -t5 le dice que espere un máximo de 5 segundos para la entrada

Trabajo casi exclusivamente con Bash en CentOS, por lo que no puedo garantizar que esto funcione en otras variantes de Linux, pero como es Bash, esperaría que funcione. ¡Me encantaría saber con certeza si es así! :)


0

La simple espera para detener el script es llamar kill -STOP $$desde el script: después de una pausa, el script continuará su trabajo después de recibir la señal -CONT.

#!/bin/bash
echo "$0 stopping now"
kill -STOP $$
echo "$0 continues its work"

¿Cómo se envía la CONTseñal al guión?
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"

coloque estas 3 líneas en un archivo .sh y ejecútelo


1
-1 ¿Qué se supone que debe hacer esto y por qué? ¿Por qué echono se muestra la salida del último comando y qué tiene que ver con la velocidad de la computadora?
David Foerster
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.