Làm cách nào để tạm dừng tập lệnh shell của tôi trong một giây trước khi tiếp tục?


702

Tôi chỉ tìm thấy làm thế nào để chờ người dùng nhập liệu. Tuy nhiên, tôi chỉ muốn tạm dừng để while truemáy tính của tôi không bị sập.

Tôi đã thử pause(1), nhưng nó nói -bash: syntax error near unexpected token '1'. Nó được hoàn thiện bằng cách nào?

Câu trả lời:


1231

Sử dụng sleeplệnh.

Thí dụ:

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.

Người ta cũng có thể sử dụng số thập phân khi chỉ định đơn vị thời gian; ví dụsleep 1.5s


12
Tôi luôn quên nó sleep! ( pause, waithoặc delaysẽ có ý nghĩa hơn và dễ nhớ hơn.)
Geremia

47
Có vẻ như trên Mac OS X, s, m, h, hoặc d không có bất kỳ tác động nào. Bạn phải chỉ định thời gian tính bằng giây.
Kiến trúc sư AI

6
Tôi nghĩ việc đặt tên là vì chúng tôi có thread.sleepchức năng trong nhiều ngôn ngữ lập trình @Geremia
Amin_mmz

89

Và thế còn:

read -p "Press enter to continue"

35
Trên thực tế, điều này đã trả lời câu hỏi của tôi , ngay cả khi nó không trả lời OP.
Jesse Chisholm

9
Điều này không có gì để làm với bài này.
Murtadha S.

6
@murtadhaalsabbagh, Nhưng có rất nhiều việc phải làm với Google lập chỉ mục :) Đã giúp tôi quá, btw.
Iulian Onofrei

đọc -p "Nhấn enter để tiếp tục" -t 1 nên tạm dừng trong 1 giây
SzB

@JesseChisholm Tôi đoán mọi người đang tìm kiếm bash tương đương với powershell / cmdPAUSE
rovyko

66

Trong Python (câu hỏi ban đầu được gắn thẻ Python), bạn cần nhập mô-đun thời gian

import time
time.sleep(1)

hoặc là

from time import sleep
sleep(1)

Đối với shell script chỉ là

sleep 1

Mà thực thi sleeplệnh. ví dụ./bin/sleep


5
vâng, điều này cũng nói lên, đó chỉ là cái khác đầu tiên, và nó có một ví dụ hay :) nhưng +1!

3
Vì vậy, trong khi không phải là cách đúng đắn để làm điều đó, bạn có thể kết hợp câu trả lời của con trăn với Bash bằng cách sử dụng python -c "import time; time.sleep(1)"thay vì sleep 1:)
Berry M.

2
@ BlackBerryM. - Mất khoảng 1,2 giây khi tôi thử nó. Python không khởi động ngay lập tức - bạn cần tính đến điều đó. Làm cho nó python -c "import time; time.sleep(0.8)"thay thế. Nhưng sau đó chúng ta cần phải tính đến việc khởi động trăn thực sự mất bao lâu. Bạn cần chạy cái này: date +%N; python -c "import time; time.sleep(0)"; date +%Nđể xác định con trăn đang dùng bao nhiêu nano giây để bắt đầu. Nhưng điều đó cũng bao gồm một số chi phí từ ngày chạy. Chạy cái này date +%N; date +%Nđể tìm cái đầu đó. Chi phí hoạt động của Python trên máy của tôi thực sự gần hơn 0,14 giây. Vì vậy tôi muốn time.sleep(0.86).
ArtOfWarfare

Đúng, mặc dù bạn sẽ không bao giờ có được chính xác 1000ms, thậm chí không như vậy.
Berry M.

Thông thường thông số kỹ thuật ít nhất là lượng thời gian nhất định, thường phù hợp với mục đích của giấc ngủ.
Marlin Pierce

40

Tôi nhận ra rằng tôi hơi muộn với điều này, nhưng bạn cũng có thể gọi giấc ngủ và vượt qua thời gian đã nghỉ. Ví dụ: Nếu tôi muốn đợi trong 3 giây tôi có thể làm:

/bin/sleep 3

4 giây sẽ như thế này:

/bin/sleep 4

5
Chỉ vấp phải điều này, đó là vì câu trả lời được bình chọn hàng đầu, @RyndallCooper, đã nổi điên gần một năm trước, có -59x nhiều điểm và đi sâu hơn nhiều, và câu hỏi này vẫn xuất hiện trên nó chỉ đơn giản là gần đây hơn.
Aido

2
@AidanEdwards Đó cũng là câu trả lời hàng đầu đối với tôi cho đến khi tôi sắp xếp theo "phiếu bầu" (đó là mặc định - Tôi tự hỏi làm thế nào nó được đặt thành "hoạt động"?). Đặt nó thành "phiếu" đã sửa nó mặc dù. Kỳ dị.
christianbundy

1
@stackoverflow - Các bạn nên thay đổi cách thức hoạt động ... hãy luôn luôn được bình chọn hàng đầu!
Deian

3
"Đó là vì câu trả lời được bình chọn hàng đầu ... vẫn xuất hiện phía trên nó chỉ đơn giản là gần đây hơn" - uhhh, không, người ta KHÔNG BAO GIỜ bỏ phiếu trả lời cho những lý do phù phiếm không liên quan đến nội dung xấu trong câu trả lời đó.
Nicholas Petersen

35

Trên Mac OSX, giấc ngủ không mất vài phút / vân vân, chỉ vài giây. Vì vậy, trong hai phút,

sleep 120

27

Chạy nhiều giấc ngủ và ra lệnh

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

Điều này sẽ đợi trong 5 giây trước khi thực hiện tập lệnh đầu tiên, sau đó sẽ ngủ lại trong 3 giây trước khi nó thay đổi thư mục một lần nữa.


4
+1 ... vì nếu bạn sử dụng một ký hiệu và sau khi ngủ, nó sẽ chuyển chế độ ngủ sang chủ đề của chính nó, ngay lập tức bắt đầu hành động tiếp theo (tức là giấc ngủ không trì hoãn hành động tiếp theo)
Jay Marm

18

Trong tập lệnh, bạn có thể thêm phần sau vào giữa các hành động bạn muốn tạm dừng. Điều này sẽ tạm dừng thói quen trong 5 giây.

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

Điều này sẽ không thực sự làm việc, phải không? Tôi nghĩ rằng -t 5sẽ hủy bỏ kịch bản sau 5 giây, không tiếp tục, ít nhất là theo trang người đàn ông này để đọc
Brad park

@BradParks Có, nó sẽ hoạt động Chỉ trong trường hợp: root @ Joses-iPad: ~ # cat readtest.bash #! / Bin / bash echo "Tại đây" đọc -p "Tạm dừng 5 giây" -t 5 đọc -p "Tiếp tục 5 giây .... "-t 5 tiếng vang" Tiếp tục .... "tiếng vang" Có "root @ Joses-iPad: ~ # cat re./st.bash Tại đây Tạm dừng thời gian 5 giây Tiếp tục trong 5 giây .... Tiếp tục .... Có
Jose H. Rosa

Hmmm .... tôi nghĩ bạn đúng! Tôi nghĩ rằng tôi đã thử điều này, nhưng tôi chỉ thử lại và nó hoạt động như quảng cáo. Cảm ơn!
Brad

5

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

Để tiếp tục khi bạn nhấn bất kỳ một nút


7
Mặc dù đoạn mã này có thể là giải pháp, bao gồm một lời giải thích thực sự giúp cải thiện chất lượng bài đăng của bạn. Hãy nhớ rằng bạn đang trả lời câu hỏi cho độc giả trong tương lai và những người đó có thể không biết lý do cho đề xuất mã của bạn.
peacetype

1
Câu trả lời này là một nhận xét chỉ có mã. Nó không cố gắng để giải thích mã được đưa ra. Tôi cảm thấy người đăng đã hiểu sai câu hỏi là "Làm thế nào để tôi đợi người dùng nhập vào trong khi đồng thời hết thời gian chờ người dùng đó"
Zimano

2

Bạn có thể làm cho nó chờ bằng $ RANDOM, trình tạo số ngẫu nhiên mặc định. Ở bên dưới tôi đang sử dụng 240 giây. Mong rằng sẽ giúp @

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

1

sử dụng bẫy để tạm dừng và kiểm tra dòng lệnh trước khi chạy

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

Bấm phím bất kỳ để tiếp tục

sử dụng với set -xđể gỡ lỗi dòng lệnh

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.