Come posso mettere in pausa lo script della shell per un secondo prima di continuare?


702

Ho solo trovato come attendere l'input dell'utente. Tuttavia, voglio solo mettere in pausa in modo che il while truemio computer non si blocchi.

Ci ho provato pause(1), ma dice -bash: syntax error near unexpected token '1'. Come si può fare?

Risposte:


1231

Usa il sleepcomando

Esempio:

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.

Si possono anche usare decimali quando si specifica un'unità di tempo; per esempiosleep 1.5s


12
Lo dimentico sempre sleep! ( pause, waito delayavrebbe più senso e sarebbe più facile da ricordare.)
Geremia,

47
Sembra che su Mac OS X, s, m, h e d non abbiano alcun impatto. È necessario specificare il tempo in secondi.
L'architetto AI

6
Penso che la denominazione sia perché abbiamo thread.sleepfunzione in molti linguaggi di programmazione @Geremia
Amin_mmz

89

E che mi dici di:

read -p "Press enter to continue"

35
In realtà, questo ha risposto alla mia domanda, anche se non risponde al PO.
Jesse Chisholm,

9
questo non ha nulla a che fare con questo post.
Murtadha S.

6
@murtadhaalsabbagh, ma ha molto a che fare con l'indicizzazione di Google :) Mi ha aiutato anche io, a proposito.
Iulian Onofrei il

leggi -p "Premi Invio per continuare" -t 1 dovrebbe fermarsi per 1 secondo
SzB

@JesseChisholm Immagino che le persone stiano cercando l'equivalente bash della powershell / cmdPAUSE
rovyko il

66

In Python (la domanda era originariamente contrassegnata con Python) è necessario importare il modulo temporale

import time
time.sleep(1)

o

from time import sleep
sleep(1)

Per shell script è giusto

sleep 1

Che esegue il sleepcomando. per esempio./bin/sleep


5
sì, lo dice anche questo, è solo l'altro per primo, e ha un buon esempio :) ma +1!

3
Quindi, sebbene non sia il modo giusto per farlo, puoi combinare la risposta di Python con Bash usando python -c "import time; time.sleep(1)"invece di sleep 1:)
Berry M.

2
@BerryM. - Ci vogliono circa 1,2 secondi quando lo provo. Python non si avvia all'istante - devi renderlo conto. Fallo python -c "import time; time.sleep(0.8)"invece. Ma allora dobbiamo considerare il tempo necessario per l'avvio di Python. È necessario eseguire questo: date +%N; python -c "import time; time.sleep(0)"; date +%Nper determinare quanti nanosecondi sta impiegando Python per iniziare. Ma questo include anche alcune spese generali dalla data di esecuzione. Esegui questo date +%N; date +%Nper trovare quel sovraccarico. Il sovraccarico di Python sulla mia macchina era in realtà più vicino a 0,14 secondi. Quindi voglio time.sleep(0.86).
ArtOfWarfare il

È vero, anche se non otterrai mai esattamente 1000ms, nemmeno così.
Berry M.,

In genere la specifica è almeno la quantità di tempo indicata, che di solito si adatta allo scopo del sonno.
Marlin Pierce,

40

Mi rendo conto di essere un po 'in ritardo con questo, ma puoi anche chiamare sleep e passare il tempo invalido. Ad esempio, se volessi aspettare 3 secondi, posso fare:

/bin/sleep 3

4 secondi sarebbe simile a questo:

/bin/sleep 4

5
Ci siamo imbattuti in questo, è perché la risposta più votata, quella di @RyndallCooper, pazza quasi un anno prima, ha -59x tanti punti e va molto più in profondità, e questa appare ancora sopra di essa semplicemente essendo più recente.
Aido,

2
@AidanEdwards Anche per me è stata la risposta migliore fino a quando non ho ordinato "voti" (che è l'impostazione predefinita - mi chiedo come sia stato impostato su "attivo"?). Impostandolo su "voti", è stato risolto. Strano.
christianbundy,

1
@stackoverflow - voi ragazzi dovreste cambiare il modo in cui funziona ... tenete sempre i primi votati per primi!
Deian,

3
"è perché la risposta più votata ... appare ancora al di sopra di essa semplicemente essendo più recente" - uhhh, no, non si dovrebbe MAI votare una risposta per motivi così frivoli non correlati a cattivi contenuti in quella risposta.
Nicholas Petersen,

35

Su Mac OSX, la sospensione non richiede minuti / ecc., Solo secondi. Quindi per due minuti,

sleep 120

27

Esegui più sleep e comandi

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

Questo attenderà 5 secondi prima di eseguire il primo script, quindi dormirà di nuovo per 3 secondi prima che cambi nuovamente directory.


4
+1 ... perché se usi una e commerciale dopo il sonno, invia il sonno al suo thread e avvia immediatamente l'azione successiva (ovvero il sonno non ritarda l'azione successiva)
Jay Marm

18

All'interno dello script puoi aggiungere quanto segue tra le azioni che desideri mettere in pausa. Questo metterà in pausa la routine per 5 secondi.

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

Questo non funzionerà davvero, vero? Penso che -t 5interromperà la sceneggiatura dopo 5 secondi, non continuerà, almeno secondo questa pagina man per la lettura
Brad Parks

@BradParks Sì, funzionerà Per ogni evenienza: root @ Joses-iPad: ~ # cat readtest.bash #! / Bin / bash echo "Qui" read -p "Tempo di pausa 5 secondi" -t 5 read -p "Continua in 5 secondi .... "-t 5 echo" Continua .... "echo" Lì "root @ Joses-iPad: ~ # cat re./st.bash Qui Tempo di pausa 5 secondiContinuo in 5 secondi .... Continua .... Ecco
Jose H. Rosa,

Hmmm .... Penso che tu abbia ragione! Pensavo di averlo provato, ma l'ho appena provato di nuovo e funziona come pubblicizzato. Grazie!
Brad Parks,

5

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

Per continuare quando si preme un pulsante qualsiasi


7
Sebbene questo frammento di codice possa essere la soluzione, inclusa una spiegazione aiuta davvero a migliorare la qualità del tuo post. Ricorda che in futuro stai rispondendo alla domanda dei lettori e che queste persone potrebbero non conoscere i motivi del tuo suggerimento sul codice.
peacetype,

1
Questa risposta è un commento di solo codice. Non tenta di spiegare il codice fornito. Sento che il poster ha interpretato erroneamente la domanda come "Come posso aspettare l'input dell'utente mentre contemporaneamente ho un timeout su quell'input dell'utente"
Zimano

2

Puoi farlo aspettare usando $ RANDOM, un generatore di numeri casuali predefinito. Di seguito sto usando 240 secondi. Spero che aiuti @

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

1

usa trap per mettere in pausa e controllare la riga di comando prima di eseguire

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

premere un tasto qualsiasi per continuare

utilizzare con set -xper eseguire il debug della riga di comando

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.