¿Cómo detengo mi script de shell por un segundo antes de continuar?


702

Solo he encontrado cómo esperar la entrada del usuario. Sin embargo, solo quiero hacer una pausa para que while truemi computadora no se bloquee.

Lo intenté pause(1), pero dice -bash: syntax error near unexpected token '1'. ¿Cómo puede hacerse esto?

Respuestas:


1231

Usa el sleepcomando.

Ejemplo:

sleep .5 # Waits 0.5 second.
sleep 5  # Waits 5 seconds.
sleep 5s # Waits 5 seconds.
sleep 5m # Waits 5 minutes.
sleep 5h # Waits 5 hours.
sleep 5d # Waits 5 days.

También se pueden emplear decimales al especificar una unidad de tiempo; p.ejsleep 1.5s


12
¡Siempre lo olvido sleep! ( pause,, waito delaytendría más sentido y sería más fácil de recordar.)
Geremia

47
Parece que en Mac OS X, s, m, h, yd no tienen ningún impacto. Debe especificar el tiempo en segundos.
El arquitecto AI

66
Creo que el nombramiento se debe a que tenemos thread.sleepfunciones en muchos lenguajes de programación @Geremia
Amin_mmz

89

Y que hay con:

read -p "Press enter to continue"

35
En realidad, esto respondió mi pregunta, incluso si no responde al OP.
Jesse Chisholm

99
Esto no tiene nada que ver con esta publicación.
Murtadha S.

66
@murtadhaalsabbagh, pero tiene mucho que ver con la indexación de Google :) También me ayudó, por cierto.
Iulian Onofrei

lee -p "Presiona enter para continuar" -t 1 debería pausar por 1 segundo
SzB

@JesseChisholm Supongo que la gente está buscando el equivalente bash del powershell / cmdPAUSE
rovyko

66

En Python (la pregunta se etiquetó originalmente como Python), debe importar el módulo de tiempo

import time
time.sleep(1)

o

from time import sleep
sleep(1)

Para el script de shell es solo

sleep 1

Que ejecuta el sleepcomando. p.ej./bin/sleep


55
sí, esto también lo dice, es solo que el otro fue el primero, y tiene un buen ejemplo :) ¡pero +1!

3
Entonces, aunque no es la forma correcta de hacerlo, puede combinar la respuesta de Python con Bash usando en python -c "import time; time.sleep(1)"lugar de sleep 1:)
Berry M.

2
@BerryM. - Toma alrededor de 1.2 segundos cuando lo intento. Python no se inicia instantáneamente, debe tener en cuenta eso. Hazlo en su python -c "import time; time.sleep(0.8)"lugar. Pero luego tenemos que tener en cuenta cuánto tiempo dura realmente el inicio de Python. Necesita ejecutar esto: date +%N; python -c "import time; time.sleep(0)"; date +%Npara determinar cuántos nanosegundos tarda Python en comenzar. Pero eso también incluye algunos gastos generales desde la fecha de ejecución. Ejecute esto date +%N; date +%Npara encontrar esa sobrecarga. La sobrecarga de Python en mi máquina estaba realmente más cerca de 0.14 segundos. Entonces yo quiero time.sleep(0.86).
ArtOfWarfare

Es cierto, aunque nunca obtendrás exactamente 1000 ms, ni siquiera así.
Berry M.

Por lo general, la especificación es al menos la cantidad de tiempo dada, que generalmente se adapta al propósito del sueño.
Marlin Pierce

40

Me doy cuenta de que llego un poco tarde con esto, pero también puedes llamar a dormir y pasar el tiempo de espera. Por ejemplo, si quisiera esperar 3 segundos, puedo hacer:

/bin/sleep 3

4 segundos se verían así:

/bin/sleep 4

55
Me topé con esto, es porque la respuesta mejor votada, @RyndallCooper, enojada casi un año antes, tiene -59x más puntos y va mucho más en profundidad, y esta todavía aparece por encima de ella simplemente por ser más reciente.
Aido

2
@AidanEdwards Fue la mejor respuesta para mí también hasta que ordené por "votos" (que es el valor predeterminado; me pregunto cómo se configuró como "activo"). Sin embargo, establecerlo en "votos" lo arregló. Extraño.
christianbundy

1
@stackoverflow: ustedes deberían cambiar cómo funciona ... ¡mantengan a los mejores votados siempre primero!
Deian

3
"Es porque la respuesta más votada ... todavía aparece por encima de ella simplemente por ser más reciente" - uhhh, no, NUNCA se debe rechazar una respuesta por razones tan frívolas no relacionadas con el mal contenido en esa respuesta.
Nicholas Petersen

35

En Mac OSX, la suspensión no toma minutos / etc, solo segundos. Entonces por dos minutos,

sleep 120

27

Ejecuta múltiples durmientes y comandos

sleep 5 && cd /var/www/html && git pull && sleep 3 && cd ..

Esto esperará 5 segundos antes de ejecutar el primer script, luego volverá a dormir durante 3 segundos antes de que vuelva a cambiar de directorio.


44
+1 ... porque si usas un ampers y después del sueño, envía el sueño a su propio hilo e inmediatamente comienza la siguiente acción (es decir, el sueño no retrasa la próxima acción)
Jay Marm

18

Dentro de la secuencia de comandos, puede agregar lo siguiente entre las acciones en las que desea la pausa. Esto pausará la rutina durante 5 segundos.

read -p "Pause Time 5 seconds" -t 5
read -p "Continuing in 5 Seconds...." -t 5
echo "Continuing ...."

Esto realmente no funcionará, ¿verdad? Creo que -t 5eso abortará el guión después de 5 segundos, no continuará, al menos según esta página de manual para leer
Brad Parks,

@BradParks Sí, funcionará Por si acaso: root @ Joses-iPad: ~ # cat readtest.bash #! / Bin / bash echo "Aquí" lee -p "Tiempo de pausa 5 segundos" -t 5 lee -p "Continúa en 5 segundos .... "-t 5 echo" Continuando .... "echo" Allí "root @ Joses-iPad: ~ # cat re./st.bash Aquí Pausa Tiempo 5 segundos Continuando en 5 segundos .... Continuando .... Allí
Jose H. Rosa

Hmmm ... creo que tienes razón! Pensé que había intentado esto, pero lo intenté nuevamente y funciona como se anuncia. ¡Gracias!
Brad Parks el

5

read -r -p "Wait 5 seconds or press any key to continue immediately" -t 5 -n 1 -s

Para continuar cuando presiona cualquier botón


77
Si bien este fragmento de código puede ser la solución, incluir una explicación realmente ayuda a mejorar la calidad de su publicación. Recuerde que está respondiendo la pregunta para los lectores en el futuro, y que esas personas podrían no conocer los motivos de su sugerencia de código.
paz

1
Esta respuesta es un comentario de solo código. No intenta explicar el código dado. Siento que el cartel malinterpretó la pregunta como "¿Cómo espero la entrada del usuario mientras simultáneamente tengo un tiempo de espera en esa entrada del usuario"
Zimano

2

Puede hacerlo esperar usando $ RANDOM, un generador de números aleatorios predeterminado. En el siguiente estoy usando 240 segundos. Espero que ayude @

> WAIT_FOR_SECONDS=`/usr/bin/expr $RANDOM % 240` /bin/sleep
> $WAIT_FOR_SECONDS

1

use trap para pausar y verificar la línea de comando antes de ejecutar

trap 'tput setaf 1;tput bold;echo $BASH_COMMAND;read;tput init' DEBUG

Pulse cualquier tecla para continuar

utilizar con set -xpara depurar la línea de comando

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.