Como pausar meu script de shell por um segundo antes de continuar?

702

Eu só descobri como esperar pela entrada do usuário. No entanto, só quero fazer uma pausa para que while truemeu computador não trave.

Eu tentei pause(1), mas diz -bash: syntax error near unexpected token '1'. Como pode ser feito?

codeforester
fonte

Respostas:

1231

Use o sleepcomando

Exemplo:

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.

Também se pode empregar casas decimais ao especificar uma unidade de tempo; por exemplosleep 1.5s

RydallCooper
fonte
12
Eu sempre esqueço que é sleep! ( pause, waitOu delayfaria mais sentido e ser mais fácil de lembrar.)
Geremia
47
Parece que no Mac OS X, s, m, h nem d têm algum impacto. Você deve especificar o tempo em segundos.
A AI Architect
6
Eu acho que a nomenclatura é porque temos thread.sleepfunção em muitas linguagens de programação @Geremia
Amin_mmz
89

E sobre:

read -p "Press enter to continue"
Vonton
fonte
35
Na verdade, isso respondeu à minha pergunta, mesmo que não responda ao OP.
Jesse Chisholm
9
isso não tem nada a ver com este post.
Murtadha S.
6
@murtadhaalsabbagh, mas tem muito a ver com a indexação do Google :) Também me ajudou, btw.
Iulian Onofrei 27/06/19
leia -p "Pressione enter para continuar" -t 1 deve pausar por 1 segundo
SzB
@JesseChisholm Eu acho que as pessoas estão procurando o equivalente do bash do powershell / cmdPAUSE
rovyko 15/03
66

No Python (a pergunta foi originalmente marcada como Python), você precisa importar o módulo de hora

import time
time.sleep(1)

ou

from time import sleep
sleep(1)

Para shell script é apenas

sleep 1

O qual executa o sleepcomando. por exemplo./bin/sleep

John La Rooy
fonte
5
sim, isso também diz, é apenas o outro que foi o primeiro e tem um bom exemplo :) mas +1!
3
Assim, enquanto não o caminho certo para fazê-lo, você pode combinar a resposta python com Bash, usando python -c "import time; time.sleep(1)"em vez de sleep 1:)
Berry M.
2
@BerryM. - Demora cerca de 1,2 segundos quando eu tento. O Python não inicia instantaneamente - você precisa dar conta disso. Faça em python -c "import time; time.sleep(0.8)"vez disso. Mas então precisamos levar em consideração quanto tempo a inicialização do python realmente leva. Você precisa executar o seguinte: date +%N; python -c "import time; time.sleep(0)"; date +%Npara determinar quantos nanossegundos o python está demorando para iniciar. Mas isso também inclui algumas despesas gerais a partir da data de execução. Execute isso date +%N; date +%Npara encontrar essa sobrecarga. A sobrecarga do Python na minha máquina estava mais próxima de 0,14 segundos. Então eu quero time.sleep(0.86).
ArtOfWarfare
É verdade que você nunca terá exatamente 1000ms, nem mesmo isso.
Berry M.
Normalmente, as especificações são pelo menos a quantidade de tempo especificada , que geralmente se adequa ao objetivo do sono.
Marlin Pierce
40

Percebo que estou um pouco atrasado com isso, mas você também pode ligar para dormir e passar o tempo esgotado. Por exemplo, se eu quisesse esperar por 3 segundos, poderia:

/bin/sleep 3

4 segundos ficariam assim:

/bin/sleep 4
pcmaster574
fonte
5
Apenas tropeçamos nisso, é porque a resposta mais votada, a @RyndallCooper, louca quase um ano antes, tem -59x mais pontos e é muito mais profunda, e essa ainda aparece acima simplesmente por ser mais recente.
Aido 12/02
2
@AidanEdwards Também foi a melhor resposta para mim até que eu classifiquei por "votos" (qual é o padrão - eu me pergunto como foi definido como "ativo"?). Definindo-o como "votos" foi corrigido. Esquisito.
christianbundy
1
@stackoverflow - vocês devem mudar como isso funciona ... mantenha o top votado sempre primeiro!
Deian
3
"é porque a resposta mais votada ... ainda aparece acima dela simplesmente por ser mais recente" - uhhh, não, NUNCA deve votar uma resposta por razões tão frívolas que não estão relacionadas ao conteúdo ruim dessa resposta.
Nicholas Petersen
35

No Mac OSX, o sono não leva minutos / etc, apenas segundos. Então, por dois minutos,

sleep 120
AnneTheAgile
fonte
27

Execute vários dorminhocos e comandos

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

Isso aguardará 5 segundos antes de executar o primeiro script, depois será suspenso novamente por 3 segundos antes de alterar o diretório novamente.

Robot Boy
fonte
4
+1 ... porque se você usar um e comercial após o sono ele envia o sono fora de seu próprio segmento, em seguida, começa imediatamente a próxima ação (ou seja, o sono não atrasar a próxima ação)
Jay Marm
18

Dentro do script, você pode adicionar o seguinte entre as ações que deseja pausar. Isso fará uma pausa na rotina por 5 segundos.

read -p "Pause Time 5 seconds" -t 5
read -p "Continuing in 5 Seconds...." -t 5
echo "Continuing ...."
Jose H. Rosa
fonte
Isso realmente não funciona, certo? Eu acho que -t 5vai anular o script depois de 5 segundos, não continue, pelo menos de acordo com esta página de manual para leitura
Brad Parks
@BradParks Sim, funcionará Apenas no caso: root @ Joses-iPad: ~ # cat readtest.bash #! / Bin / bash echo "Aqui" leia -p "Tempo de pausa 5 segundos" -t 5 leia -p " 5 segundos .... "-t 5 echo" Continuando .... "eco" There "root @ Joses-iPad: ~ # cat re./st.bash Aqui Tempo de pausa 5 segundosContinuando em 5 segundos .... Continuando ... Lá
Jose H. Rosa
Hmmm .... acho que você está certo! Eu pensei que tentei isso, mas tentei novamente e funciona como anunciado. Obrigado!
Brad Parks
5

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

Para continuar quando você pressiona qualquer botão

Wairua
fonte
7
Embora esse snippet de código possa ser a solução, incluir uma explicação realmente ajuda a melhorar a qualidade da sua postagem. Lembre-se de que você está respondendo à pergunta dos leitores no futuro e essas pessoas podem não saber os motivos da sua sugestão de código.
peacetype
1
Esta resposta é um comentário apenas de código. Ele não tenta explicar o código fornecido. Eu sinto o cartaz mal interpretado a pergunta como "Como posso esperar pela entrada do usuário ao mesmo tempo, ter um tempo limite em que a entrada do usuário"
Zimano
2

Você pode esperar usando $ RANDOM, um gerador de números aleatórios padrão. No abaixo eu estou usando 240 segundos. Espero que ajude @

> WAIT_FOR_SECONDS=`/usr/bin/expr $RANDOM % 240` /bin/sleep
> $WAIT_FOR_SECONDS
Balaji Boggaram Ramanarayan
fonte
1

use trap para pausar e verificar a linha de comando antes de executar

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

pressione qualquer tecla para continuar

use com set -xpara depurar linha de comando

Akhil J
fonte