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.