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:
algo en la línea de
fuente
read -p "prompt"
. Se pueden recuperar más detalles sobre las funciones integradas de shell con elhelp
comando, por ejemplohelp read
.echo -n
yprintf
. Si presiona Enter, obtendrá una nueva línea.bash
no hay ningún requisito de que leer tenga un argumento. El usosh
(que a menudo invocabash
ensh
modo compatible)read
requiere un argumento. Si comienza su secuencia de comandos#!/bin/sh
verá el último comportamientoread -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:fuente
Mi uso favorito de esto es establecer un tiempo de espera predeterminado, para que el script también pueda ejecutarse desatendido:
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 entradaTrabajo 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í! :)
fuente
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.fuente
CONT
señal al guión?coloque estas 3 líneas en un archivo .sh y ejecútelo
fuente
echo
no se muestra la salida del último comando y qué tiene que ver con la velocidad de la computadora?