ฉันจะหยุดเชลล์สคริปต์ชั่วคราวหนึ่งวินาทีก่อนดำเนินการต่อได้อย่างไร


705

ฉันพบวิธีที่จะรออินพุตของผู้ใช้เท่านั้น อย่างไรก็ตามฉันต้องการหยุดชั่วคราวเท่านั้นเพื่อที่while trueจะได้ไม่เกิดความผิดพลาดกับคอมพิวเตอร์ของฉัน

ฉันพยายามแต่มันบอกว่าpause(1) -bash: syntax error near unexpected token '1'จะทำอย่างไร?

คำตอบ:


1236

ใช้sleepคำสั่ง

ตัวอย่าง:

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.

ท่านสามารถใช้ทศนิยมเมื่อระบุหน่วยเวลา เช่นsleep 1.5s


12
ฉันมักจะลืมมันsleep! ( pause, waitหรือdelayจะทำให้เข้าใจมากขึ้นและง่ายต่อการจดจำ)
Geremia

47
ดูเหมือนว่าใน Mac OS X, s, m, h หรือ d ไม่มีผลกระทบใด ๆ คุณต้องระบุเวลาเป็นวินาที
สถาปนิก AI

6
ฉันคิดว่าการตั้งชื่อเป็นเพราะเรามีthread.sleepฟังก์ชั่นในหลาย ๆ ภาษาโปรแกรม @Geremia
Amin_mmz

89

และสิ่งที่เกี่ยวกับ:

read -p "Press enter to continue"

35
จริงๆแล้วมันตอบคำถามของฉันแม้ว่ามันจะไม่ตอบ OP
Jesse Chisholm

9
นี่ไม่เกี่ยวอะไรกับโพสต์นี้
Murtadha S.

7
@murtadhaalsabbagh แต่มีส่วนเกี่ยวข้องกับการจัดทำดัชนีของ Google เป็นอย่างมาก :) ช่วยฉันด้วยเช่นกัน btw
Iulian Onofrei

อ่าน -p "กด Enter เพื่อดำเนินการต่อ" -t 1 ควรหยุด 1 วินาที
SzB

@JesseChisholm ผมคิดว่าคนที่กำลังมองหาเทียบเท่าทุบตีของ PowerShell / cmdPAUSE
rovyko

66

ใน Python (คำถามเดิมถูกแท็ก Python) คุณต้องนำเข้าโมดูลเวลา

import time
time.sleep(1)

หรือ

from time import sleep
sleep(1)

สำหรับเชลล์สคริปต์นั้นเป็นเพียง

sleep 1

ซึ่งรันsleepคำสั่ง เช่น./bin/sleep


5
ใช่มันบอกว่ามันเหมือนกันมันเป็นแค่อีกอันหนึ่งก่อนและมันก็มีตัวอย่างที่ดี :) แต่ +1!

3
ดังนั้นในขณะที่ไม่ใช่วิธีที่เหมาะสมที่จะทำคุณสามารถรวมคำตอบหลามกับ Bash โดยใช้python -c "import time; time.sleep(1)"แทนsleep 1:)
Berry M.

2
@BerryM - ใช้เวลาประมาณ 1.2 วินาทีเมื่อฉันลอง Python ไม่ได้เริ่มต้นทันที - คุณต้องคำนึงถึงสิ่งนั้น ทำpython -c "import time; time.sleep(0.8)"แทน แต่เราต้องคำนึงถึงระยะเวลาในการเริ่มต้นของไพ ธ อน คุณต้องเรียกใช้สิ่งนี้: date +%N; python -c "import time; time.sleep(0)"; date +%Nเพื่อกำหนดว่าจะใช้ไพ ธ อนกี่นาโนวินาทีในการเริ่มต้น แต่นั่นยังรวมถึงค่าใช้จ่ายจากวันที่ทำงาน เรียกใช้สิ่งนี้date +%N; date +%Nเพื่อค้นหาค่าใช้จ่ายนั้น ค่าใช้จ่ายของไพ ธ อนในเครื่องของฉันใกล้เคียงกับ 0.14 วินาทีแล้ว time.sleep(0.86)ดังนั้นผมจึงต้องการ
ArtOfWarfare

ทรูแม้ว่าคุณจะไม่ได้รับว่า 1000ms ไม่ได้เป็นเช่นนั้น
Berry M.

โดยทั่วไปสเป็คเป็นอย่างน้อยระยะเวลาที่กำหนดซึ่งมักจะเหมาะกับวัตถุประสงค์ของการนอนหลับ
Marlin Pierce

40

ฉันรู้ว่าฉันมาช้าไปหน่อยกับสิ่งนี้ แต่คุณสามารถเรียกการนอนหลับและผ่านช่วงเวลาที่พ้นไปได้เช่นถ้าฉันต้องการรอ 3 วินาทีฉันจะทำ:

/bin/sleep 3

4 วินาทีจะมีลักษณะเช่นนี้:

/bin/sleep 4

5
เพิ่งสะดุดกับสิ่งนี้เพราะคำตอบที่ได้รับคะแนนสูงสุด @RyndallCooper เป็นบ้าเกือบหนึ่งปีก่อนหน้านั้นมี -59x เป็นจำนวนมากและลึกมากขึ้นและอันนี้ก็ยังปรากฏอยู่ข้างบนเพียงแค่ล่าสุด
Aido

2
@AidanEdwards มันเป็นคำตอบที่ดีที่สุดสำหรับฉันเช่นกันจนกว่าฉันจะเรียงลำดับโดย "โหวต" (ซึ่งเป็นค่าเริ่มต้น - ฉันสงสัยว่ามันถูกตั้งค่าเป็น "ใช้งาน"?) การตั้งค่าเป็น "โหวต" กำหนดไว้ว่า แปลก.
christianbundy

1
@stackoverflow - พวกคุณควรเปลี่ยนวิธีการทำงาน ... ให้คะแนนสูงสุดเสมอก่อน!
Deian

3
"เป็นเพราะคำตอบที่ได้รับการโหวตสูงสุด ... ยังคงปรากฏอยู่เหนือคำตอบเพียงอย่างเดียวโดยล่าสุด" - เอ่อไม่มีใครไม่ควรโหวตคำตอบด้วยเหตุผลเล็ก ๆ น้อย ๆ ที่ไม่เกี่ยวข้องกับเนื้อหาที่ไม่ดีในคำตอบนั้น
Nicholas Petersen

35

บน Mac OSX การนอนหลับไม่ใช้เวลาหลายนาที / ฯลฯ เพียงไม่กี่วินาที ดังนั้นสองนาที

sleep 120

27

เรียกใช้หลาย sleeps และคำสั่ง

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

การดำเนินการนี้จะรอ 5 วินาทีก่อนที่จะเรียกใช้สคริปต์แรกจากนั้นจะเข้าสู่โหมดสลีปอีก 3 วินาทีก่อนที่จะเปลี่ยนไดเรกทอรีอีกครั้ง


4
+1 ... cuz ถ้าคุณใช้เครื่องหมายแอมเปอร์แซนด์หนึ่งอันหลังจากการนอนหลับมันจะส่งการสลีปออกไปที่เธรดของตัวเองจากนั้นเริ่มการดำเนินการถัดไปทันที (เช่นการนอนหลับไม่ทำให้การดำเนินการถัดไปล่าช้า)
Jay Marm

18

ภายในสคริปต์คุณสามารถเพิ่มสิ่งต่อไปนี้ระหว่างการดำเนินการที่คุณต้องการหยุดชั่วคราว สิ่งนี้จะหยุดกิจวัตรเป็นเวลา 5 วินาที

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

มันใช้งานไม่ได้จริงหรือ ฉันคิดว่า-t 5จะยกเลิกสคริปต์หลังจาก 5 วินาทีไม่ดำเนินการต่อไปอย่างน้อยตามหน้าคนนี้อ่าน
Brad Parks

@BradParks ใช่มันจะทำงานได้ในกรณีที่: root @ Joses-iPad: ~ # cat readtest.bash #! / bin / bash echo "ที่นี่" read "-p" หยุดเวลา 5 วินาที "-t 5 read -p" ต่อเนื่องใน 5 วินาที .... "-t 5 echo" ต่อเนื่อง .... "echo" There "root @ Joses-iPad: ~ # cat re./st.bash ที่นี่หยุดเวลา 5 วินาทีต่อเนื่องใน 5 วินาที .... ต่อเนื่อง .... ที่นั่น
Jose H. Rosa

อืม .... ฉันคิดว่าคุณพูดถูก! ฉันคิดว่าฉันลองสิ่งนี้ แต่ฉันลองอีกครั้งและใช้งานได้ตามที่โฆษณาไว้ ขอบคุณ!
Brad Parks

5

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

เพื่อดำเนินการต่อเมื่อคุณกดปุ่มใดปุ่มหนึ่ง


7
ในขณะที่ข้อมูลโค้ดนี้อาจเป็นโซลูชันรวมถึงคำอธิบายช่วยปรับปรุงคุณภาพการโพสต์ของคุณ จำไว้ว่าคุณกำลังตอบคำถามสำหรับผู้อ่านในอนาคตและคนเหล่านั้นอาจไม่ทราบสาเหตุของการแนะนำรหัสของคุณ
peacetype

1
คำตอบนี้เป็นความคิดเห็นรหัสเท่านั้น มันไม่ได้พยายามอธิบายรหัสที่ให้ ฉันรู้สึกว่าโปสเตอร์ตีความคำถามเป็น "ฉันจะรอการป้อนข้อมูลของผู้ใช้ได้อย่างไรในขณะที่มีการหยุดพักชั่วคราวในการป้อนข้อมูลของผู้ใช้"
Zimano

2

คุณสามารถทำให้มันรอโดยใช้ $ RANDOM ตัวสร้างหมายเลขสุ่มเริ่มต้น ในด้านล่างฉันใช้ 240 วินาที หวังว่าจะช่วยให้ @

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

1

ใช้กับดักเพื่อหยุดและตรวจสอบบรรทัดคำสั่งก่อนรัน

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

กดปุ่มใดก็ได้เพื่อดำเนินการต่อ

ใช้กับset -xเพื่อดีบักบรรทัดรับคำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.