Jak wstrzymać skrypt powłoki na sekundę przed kontynuowaniem?

705

Znalazłem tylko, jak czekać na dane wejściowe użytkownika. Chcę jednak tylko zatrzymać, aby while truekomputer nie zawiesił się.

Próbowałem pause(1), ale mówi -bash: syntax error near unexpected token '1'. Jak można to zrobić?

codeforester
źródło

Odpowiedzi:

1234

Użyj sleeppolecenia.

Przykład:

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.

Można również stosować ułamki dziesiętne, określając jednostkę czasu; na przykładsleep 1.5s

RydallCooper
źródło
12
Zawsze o tym zapominam sleep! ( pause, waitlub delaybyłoby bardziej sensowne i łatwiejsze do zapamiętania.)
Geremia
47
Wygląda na to, że w systemie Mac OS X s, m, h i d nie mają żadnego wpływu. Musisz podać czas w sekundach.
Architekt AI
6
Myślę, że nazywanie jest spowodowane tym, że mamy thread.sleepfunkcję w wielu językach programowania @Geremia
Amin_mmz
89

A co z:

read -p "Press enter to continue"
Vonton
źródło
35
Właściwie to odpowiedziało na moje pytanie, nawet jeśli nie odpowiada OP.
Jesse Chisholm
9
nie ma to nic wspólnego z tym postem.
Murtadha S.
7
@murtadhaalsabbagh, Ale ma bardzo wiele wspólnego z indeksowaniem Google :) Pomógł mi też, btw.
Iulian Onofrei
czytaj -p "Naciśnij Enter, aby kontynuować" -t 1 powinien zatrzymać się na 1 sekundę
SzB
@JesseChisholm Chyba ludzie szukają PAUSE
bashowego odpowiednika powerhell
66

W Pythonie (pytanie było pierwotnie oznaczone Pythonem) musisz zaimportować moduł czasu

import time
time.sleep(1)

lub

from time import sleep
sleep(1)

Ponieważ skrypt powłoki jest po prostu

sleep 1

Który wykonuje sleeppolecenie. na przykład./bin/sleep

John La Rooy
źródło
5
tak, to też mówi, to tylko ta druga była pierwsza i ma ładny przykład :) ale +1!
3
Więc chociaż nie jest to właściwy sposób, możesz połączyć odpowiedź python z Bash, używając python -c "import time; time.sleep(1)"zamiast sleep 1:)
Berry M.
2
@BerryM. - Próbuję około 1,2 sekundy. Python nie uruchamia się natychmiast - musisz to uwzględnić. Zrób to python -c "import time; time.sleep(0.8)"zamiast tego. Ale potem musimy wziąć pod uwagę, ile faktycznie trwa uruchamianie Pythona. Musisz uruchomić to: date +%N; python -c "import time; time.sleep(0)"; date +%Naby określić, ile nanosekund zajmuje python, aby rozpocząć. Ale obejmuje to również pewne koszty ogólne od daty uruchomienia. Uruchom to, date +%N; date +%Naby znaleźć to narzut. Obciążenie Pythona na mojej maszynie było faktycznie bliższe 0,14 sekundy. Więc chcę time.sleep(0.86).
ArtOfWarfare
To prawda, że ​​nigdy nie dostaniesz dokładnie 1000 ms, nawet w ten sposób.
Berry M.
Zazwyczaj specyfikacja to co najmniej podany czas, który zwykle odpowiada celowi snu.
Marlin Pierce
40

Zdaję sobie sprawę, że trochę się z tym spóźniam, ale możesz także zadzwonić do snu i przekazać niespokojny czas. Na przykład, jeśli chcę poczekać 3 sekundy, mogę zrobić:

/bin/sleep 3

4 sekundy wyglądałyby tak:

/bin/sleep 4
pcmaster574
źródło
5
Natknąłem się na to, ponieważ odpowiedź, którą głosowało najwyżej głosowane @RyndallCooper, oszalała prawie rok wcześniej, ma -59x więcej punktów i idzie o wiele głębiej, a ta wciąż pojawia się ponad nią po prostu jako nowsza.
Aido
2
@AidanEdwards To była również dla mnie najlepsza odpowiedź, dopóki nie posortowałem według „głosów” (co jest ustawieniem domyślnym - zastanawiam się, jak ustawiono ją na „aktywną”?). Naprawiono jednak ustawienie go na „głosy”. Dziwne.
christianbundy
1
@stackoverflow - powinieneś zmienić sposób, w jaki to działa ... miej zawsze głosowanie na pierwszym miejscu!
Deian
3
„to dlatego, że najlepiej głosowana odpowiedź ... wciąż pojawia się nad nią po prostu dlatego, że jest nowsza” - nie, NIGDY nie należy głosować za odpowiedzią z tak błahych powodów, które nie są związane ze złymi treściami w tej odpowiedzi.
Nicholas Petersen,
35

W Mac OSX uśpienie nie zajmuje minut / etc, tylko sekundy. Więc przez dwie minuty

sleep 120
AnneTheAgile
źródło
27

Uruchom wiele snu i poleceń

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

Poczeka to 5 sekund przed wykonaniem pierwszego skryptu, a następnie ponownie zasypi przez 3 sekundy, zanim ponownie zmieni katalog.

Robot Boy
źródło
4
+1 ... ponieważ jeśli użyjesz jednego
znaku handlowego
18

W skrypcie możesz dodać następujące czynności między czynnościami, które chcesz wstrzymać. Spowoduje to wstrzymanie rutyny na 5 sekund.

read -p "Pause Time 5 seconds" -t 5
read -p "Continuing in 5 Seconds...." -t 5
echo "Continuing ...."
Jose H. Rosa
źródło
To nie zadziała, prawda? Myślę, że -t 5to przerwie skrypt po 5 sekundach, nie będzie kontynuowane, przynajmniej według tej strony
Brad Parks,
@BradParks Tak, to zadziała Na wszelki wypadek: root @ Joses-iPad: ~ # cat readtest.bash #! / Bin / bash echo "Tutaj" odczyt -p "Czas pauzy 5 sekund" -t 5 odczyt -p "Kontynuacja w 5 sekund .... "-t 5 echo" Kontynuacja .... "echo" Tam "root @ Joses-iPad: ~ # cat re./st.bash Tutaj Czas pauzy 5 sekund Kontynuacja za 5 sekund .... Kontynuacja .... Tam
Jose H. Rosa
Hmmm .... Myślę, że masz rację! Myślałem, że spróbowałem, ale po prostu spróbowałem jeszcze raz i działa jak w reklamie. Dzięki!
Brad Parks
5

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

Aby kontynuować po naciśnięciu dowolnego przycisku

Wairua
źródło
7
Ten fragment kodu może być rozwiązaniem, ale wyjaśnienie naprawdę pomaga poprawić jakość posta. Pamiętaj, że w przyszłości odpowiadasz na pytanie czytelników, a ci ludzie mogą nie znać przyczyn Twojej sugestii kodu.
typ pokoju
1
Ta odpowiedź jest komentarzem tylko do kodu. Nie próbuje wyjaśnić podanego kodu.
Wydaje
2

Możesz sprawić, że zaczeka, używając $ RANDOM, domyślnego generatora liczb losowych. Poniżej używam 240 sekund. Mam nadzieję, że pomaga @

> WAIT_FOR_SECONDS=`/usr/bin/expr $RANDOM % 240` /bin/sleep
> $WAIT_FOR_SECONDS
Balaji Boggaram Ramanarayan
źródło
1

użyj pułapki, aby zatrzymać i sprawdzić linię poleceń przed uruchomieniem

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

Naciśnij dowolny klawisz, aby kontynuować

służy set -xdo debugowania wiersza poleceń

Akhil J
źródło