¿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
[...]
th3pr0ph3t
fuente
Posible duplicado de ¿Cuál es el equivalente de Linux a la pausa de DOS?
MiFreidgeim SO-deja de ser malvado

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
Cadera
fuente
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
Elder Geek
fuente
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í! :)

John Landells
fuente
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"
ptwolny
fuente
¿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

Entonces Enok
fuente
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