Devam etmeden önce kabuk betiğimi nasıl bir saniye duraklatabilirim?


706

Sadece kullanıcı girdisini nasıl bekleyeceğimi buldum. Ancak, yalnızca while truebilgisayarımı kilitlememek için duraklatmak istiyorum .

Denedim pause(1)ama diyor -bash: syntax error near unexpected token '1'. Nasıl yapılabilir?

Yanıtlar:


1236

sleepKomutu kullanın .

Misal:

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.

Bir zaman birimi belirtilirken ondalık sayılar da kullanılabilir; Örneğinsleep 1.5s


12
Her zaman unuturum sleep! ( pause, waitveya delaydaha anlamlı olur ve hatırlanması daha kolay olur.)
— Geremia

47
Mac OS X'te, s, m, h veya d'nin herhangi bir etkisi yok gibi görünüyor. Zamanı saniye cinsinden belirtmelisiniz.
— AI Mimarı

6
Bence isimlendirme, thread.sleepbirçok programlama dilinde işlevimiz olduğu için @Geremia
— Amin_mmz


67

Python'da (soru başlangıçta Python olarak etiketlendi) zaman modülünü içe aktarmanız gerekir

import time
time.sleep(1)

veya

from time import sleep
sleep(1)

Kabuk betiği için

sleep 1

Hangi sleepkomutu yürütür . Örneğin./bin/sleep


5
evet, bunu da söylüyor, sadece diğeri ilkti ve güzel bir örneği var :) ama +1!

3
Değil doğru yolu bunu yapmak için süre Yani, kullanarak Bash ile piton cevap birleştirebilirsiniz python -c "import time; time.sleep(1)"yerine sleep 1:)
— Berry M.

2
@BerryM. - Denediğimde yaklaşık 1.2 saniye sürüyor. Python anında başlamıyor - bunu hesaba katmanız gerekiyor. Bunun python -c "import time; time.sleep(0.8)"yerine yapın. Ama sonra python başlatmanın gerçekte ne kadar sürdüğünü hesaba katmamız gerekiyor. Bunu çalıştırmanız gerekir: date +%N; python -c "import time; time.sleep(0)"; date +%Npython'un kaç nanosaniye başlatacağını belirlemek için. Ancak bu, çalışma tarihinden itibaren bazı ek yükleri de içerir. Bu date +%N; date +%Nyükü bulmak için çalıştırın . Python'un makinemdeki yükü aslında 0.14 saniyeye daha yakındı. Ben de istiyorum time.sleep(0.86).
— ArtOfWarfare

Doğru, ancak asla tam 1000 ms elde edemezsiniz, öyle bile değil.
— Berry M.

Tipik olarak spesifikasyon, genellikle uyku amacına uyan en az verilen süredir.
— Marlin Pierce

40

Bununla biraz geç kaldığımı fark ettim, ancak uykuyu da arayabilir ve disired zamanını geçirebilirsiniz. Örneğin, 3 saniye beklemek istersem yapabilirim:

/bin/sleep 3

4 saniye şöyle görünür:

/bin/sleep 4

5
Sadece bunun üzerine tökezledi, çünkü en çok oy alan cevap, @RyndallCooper'ın neredeyse bir yıl önce çıldırdığı, -59x kadar çok noktaya sahip ve çok daha derinlere iniyor ve bu hala daha yeni olarak hala üstünde görünüyor.
— Aido

2
@AidanEdwards Ben "oy" sıralanana kadar benim için en iyi cevaptı (bu varsayılan - nasıl "aktif" olarak ayarlanmış acaba?). "Oy" olarak ayarlamak olsa da düzeltildi. Tuhaf.
— christianbundy

1
@stackoverflow - siz bunun nasıl çalıştığını değiştirmelisiniz ... önce her zaman en iyi oyu saklayın!
— Deian

3
"çünkü en çok oylanan cevap ... hala daha yakın zamanda ortaya çıkıyor" - uhhh, hayır, kimse ASLA bu cevapta kötü içerikle ilgili olmayan anlamsız nedenlerle bir cevap oylamamalıdır.
— Nicholas Petersen

35

Mac OSX'te, uyku dakika / vb. Sürmez, yalnızca saniyeler sürer. Yani iki dakika,

sleep 120

27

Birden fazla uyku ve komut çalıştırma

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

Bu, ilk komut dosyasını yürütmeden önce 5 saniye bekleyecek, daha sonra dizini yeniden değiştirmeden önce 3 saniye boyunca yeniden uyuyacaktır.


4
+1 ... çünkü uykudan sonra bir ve işareti kullanırsanız, kendi iş parçacığına uyku gönderir ve hemen bir sonraki eylemi başlatır (yani uyku bir sonraki eylemi geciktirmez)
— Jay Marm

18

Komut dosyasına, duraklatmak istediğiniz eylemler arasına aşağıdakileri ekleyebilirsiniz. Bu rutini 5 saniye duraklatacaktır.

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

Bu aslında işe yaramaz, değil mi? Sanırım -t 5senaryoyu 5 saniye sonra iptal edecek, devam etmeyecek, en azından okumak için bu adam sayfasına göre
— Brad Parks

@BradParks Evet çalışır Her durumda: root @ Joses-iPad: ~ # cat readtest.bash #! / Bin / bash echo "İşte" read -p "Duraklama Süresi 5 saniye" -t 5 okuma -p "Devam ediyor 5 Saniye .... "-t 5 yankı" Devam ediyor "" yankı "Orada" kökü @ Joses-iPad: ~ # cat re./st.bash Burada Duraklama Süresi 5 saniye Devam ediyor 5 saniye ... Devam .... Orada
— Jose H. Rosa

Hmmm .... Bence haklısın! Ben bunu denedim, ama sadece tekrar denedim ve reklamı gibi çalışır düşündüm. Teşekkürler!
— Brad Parks

5

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

Herhangi bir düğmeye bastığınızda devam etmek için


7
Bu kod snippet'i çözüm olsa da, bir açıklama da dahil olmak üzere mesajınızın kalitesini artırmaya yardımcı olur. Gelecekte okuyucular için soruyu cevapladığınızı ve bu kişilerin kod önerinizin nedenlerini bilmeyebileceğini unutmayın.
— peacetype

1
Bu yanıt yalnızca kod içeren bir yorumdur. Verilen kodu açıklamaya çalışmaz. Posterin "Aynı anda bu kullanıcı girişinde zaman aşımı olurken kullanıcı girişini nasıl beklerim" sorusunu yanlış yorumladığını hissediyorum
— Zimano

2

Varsayılan rasgele sayı üreteci $ RANDOM'u kullanarak bekletebilirsiniz. Aşağıda 240 saniye kullanıyorum. Umarım yardımcı olur @

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

1

çalıştırmadan önce komut satırını duraklatmak ve kontrol etmek için tuzağı kullan

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

Devam etmek için herhangi bir tuşa basın

ile kullanmak set -xayıklama komut satırına

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.