Bagaimana saya menjeda skrip shell saya sejenak sebelum melanjutkan?

702

Saya hanya menemukan cara menunggu input pengguna. Namun, saya hanya ingin berhenti sebentar agar while truekomputer saya tidak macet.

Saya mencoba pause(1), tetapi dikatakan-bash: syntax error near unexpected token '1' . Bagaimana itu bisa dilakukan?

codeforester
sumber

Jawaban:

1231

Menggunakan sleep perintah.

Contoh:

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.

Seseorang juga dapat menggunakan desimal ketika menentukan satuan waktu; misalnyasleep 1.5s

RydallCooper
sumber
12
Saya selalu lupa itu sleep! ( pause,, waitatau delayakan lebih masuk akal dan lebih mudah diingat.)
Geremia
47
Tampaknya pada Mac OS X, s, m, h, atau d tidak memiliki dampak apa pun. Anda harus menentukan waktu dalam detik.
Arsitek AI
6
Saya pikir penamaannya adalah karena kami memiliki thread.sleepfungsi dalam banyak bahasa pemrograman @Geremia
Amin_mmz
89

Dan bagaimana dengan:

read -p "Press enter to continue"
Vonton
sumber
35
Sebenarnya, ini menjawab pertanyaan saya , bahkan jika itu tidak menjawab OP.
Jesse Chisholm
9
ini tidak ada hubungannya dengan posting ini.
Murtadha S.
6
@murtadhaalsabbagh, Tetapi sangat banyak hubungannya dengan pengindeksan Google :) Membantu saya juga, btw.
Iulian Onofrei
baca -p "Tekan enter untuk melanjutkan" -t 1 harus berhenti sebentar
SzB
@JesseChisholm Saya kira orang mencari setara bash dari powershell / cmdPAUSE
rovyko
66

Dalam Python (pertanyaan awalnya ditandai Python) Anda perlu mengimpor modul waktu

import time
time.sleep(1)

atau

from time import sleep
sleep(1)

Untuk skrip shell hanya

sleep 1

Yang mengeksekusi sleepperintah. misalnya./bin/sleep

John La Rooy
sumber
5
ya, ini juga mengatakan, hanya yang lain dulu, dan punya contoh yang bagus :) tapi +1!
3
Jadi, meskipun bukan cara yang tepat untuk melakukannya, Anda dapat menggabungkan jawaban python dengan Bash dengan menggunakan python -c "import time; time.sleep(1)"alih-alih sleep 1:)
Berry M.
2
@BerryM. - Membutuhkan sekitar 1,2 detik ketika saya mencobanya. Python tidak memulai secara instan - Anda harus memperhitungkannya. Buatlah itu python -c "import time; time.sleep(0.8)"sebagai gantinya. Tapi kemudian kita perlu memperhitungkan berapa lama waktu yang dibutuhkan untuk memulai python. Anda perlu menjalankan ini: date +%N; python -c "import time; time.sleep(0)"; date +%Nuntuk menentukan berapa banyak python nanodetik yang diperlukan untuk memulai. Tetapi itu juga termasuk beberapa overhead dari tanggal berjalan. Jalankan ini date +%N; date +%Nuntuk menemukan overhead itu. Overhead Python pada mesin saya sebenarnya lebih dekat ke 0,14 detik. Jadi saya mau time.sleep(0.86).
ArtOfWarfare
Benar, meskipun Anda tidak akan pernah mendapatkan 1000ms persis , bahkan tidak seperti itu.
Berry M.
Biasanya spek adalah setidaknya jumlah waktu yang diberikan, yang biasanya sesuai dengan tujuan tidur.
Marlin Pierce
40

Saya menyadari bahwa saya agak terlambat dengan hal ini, tetapi Anda juga dapat menelepon tidur dan melewatkan waktu yang dihabiskan. Sebagai contoh, Jika saya ingin menunggu selama 3 detik, saya dapat melakukannya:

/bin/sleep 3

4 detik akan terlihat seperti ini:

/bin/sleep 4
pcmaster574
sumber
5
Hanya tersandung pada ini, itu karena jawaban terpilih, @RyndallCooper, marah hampir setahun sebelumnya, memiliki -59x poin lebih banyak dan berjalan jauh lebih dalam, dan yang ini masih muncul di atasnya hanya dengan menjadi lebih baru.
Aido
2
@AidanEdwards Itu adalah jawaban teratas bagi saya juga sampai saya diurutkan berdasarkan "suara" (yang merupakan default - saya bertanya-tanya bagaimana itu bisa diatur ke "aktif"?). Mengaturnya ke "suara" memperbaikinya. Aneh.
christianbundy
1
@stackoverflow - kalian harus mengubah cara kerjanya ... pertahankan peringkat teratas selalu diutamakan!
Deian
3
"Itu karena jawaban terpilih ... masih muncul di atasnya hanya dengan menjadi lebih baru" - uhhh, tidak, orang TIDAK PERNAH harus memilih suara karena alasan sembrono yang tidak terkait dengan konten yang buruk dalam jawaban itu.
Nicholas Petersen
35

Di Mac OSX, tidur tidak membutuhkan menit / dll, hanya beberapa detik. Jadi selama dua menit,

sleep 120
AnneTheAgile
sumber
27

Jalankan beberapa sleeps dan perintah

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

Ini akan menunggu selama 5 detik sebelum menjalankan skrip pertama, lalu akan tidur lagi selama 3 detik sebelum mengubah direktori lagi.

Robot Boy
sumber
4
+1 ... karena jika Anda menggunakan satu ampers dan setelah tidur ia mengirim tidur ke utasnya sendiri lalu segera memulai tindakan berikutnya (yaitu, tidur tidak menunda tindakan berikutnya)
Jay Marm
18

Di dalam skrip Anda dapat menambahkan berikut ini di antara tindakan yang Anda ingin jeda. Ini akan menghentikan rutinitas selama 5 detik.

read -p "Pause Time 5 seconds" -t 5
read -p "Continuing in 5 Seconds...." -t 5
echo "Continuing ...."
Jose H. Rosa
sumber
Ini tidak akan berhasil, kan? Saya pikir itu -t 5akan membatalkan skrip setelah 5 detik, tidak melanjutkan, setidaknya menurut halaman manual ini untuk dibaca
Brad Parks
@BradParks Ya itu akan bekerja Hanya dalam kasus: root @ Joses-iPad: ~ # cat readtest.bash #! / Bin / bash echo "Sini" baca -p "Jeda Waktu 5 detik" -t 5 baca -p "Melanjutkan 5 Detik .... "-t 5 gema" Melanjutkan .... "gema" Di sana "root @ Joses-iPad: ~ # cat re./st.bash Di Sini Jeda Waktu 5 detikLanjutkan dalam 5 Detik .... Berlanjut .... Di sana
Jose H. Rosa
Hmmm .... Saya pikir Anda benar! Saya pikir saya sudah mencoba ini, tetapi saya hanya mencobanya lagi dan berfungsi seperti yang diiklankan. Terima kasih!
Brad Parks
5

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

Untuk melanjutkan ketika Anda menekan salah satu tombol

Wairua
sumber
7
Sementara cuplikan kode ini mungkin solusinya, termasuk penjelasan sangat membantu untuk meningkatkan kualitas posting Anda. Ingatlah bahwa Anda menjawab pertanyaan untuk pembaca di masa depan, dan orang-orang itu mungkin tidak tahu alasan untuk saran kode Anda.
peacetype
1
Jawaban ini adalah komentar hanya kode. Itu tidak berusaha menjelaskan kode yang diberikan. Saya merasa poster salah menafsirkan pertanyaan itu sebagai "Bagaimana saya menunggu input pengguna sementara secara bersamaan memiliki timeout pada input pengguna itu"
Zimano
2

Anda dapat membuatnya menunggu menggunakan $ RANDOM, generator nomor acak default. Di bawah ini saya menggunakan 240 detik. Semoga itu bisa membantu @

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

gunakan perangkap untuk menjeda dan memeriksa baris perintah sebelum menjalankan

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

tekan tombol apa saja untuk melanjutkan

gunakan dengan set -xuntuk men-debug baris perintah

Akhil J
sumber