ใช้โหมดสลีปกับนาทีและวินาที


16

ฉันรู้วิธีใช้ sleep 5m เป็นเวลา 5 นาที

ฉันจะใช้งานเป็นเวลา 7 นาที 30 วินาทีได้อย่างไร

คำตอบ:


32

จากmanpage :

ป.ร. ให้ไว้สองคนหรือมากกว่าข้อโต้แย้งหยุดสำหรับระยะเวลาที่กำหนดโดยผลรวมของค่าของพวกเขา

ดังนั้น:

sleep 7m 30s

2
ดีฉันต้องอ่านหน้าคนอย่างระมัดระวังมากขึ้น ...
Ravexina

4
อาจจะน่าสังเกตว่านี่เป็น พฤติกรรมbashในตัวและ GNU sleepPOSIXly sleepต้องเข้าใจจำนวนเต็มเป็นวินาทีเท่านั้น
Sergiy Kolodyazhnyy

17

อีกวิธีในการทำเช่นนี้คือ:

sleep 7.5m

man sleep

แตกต่างจากการใช้งานส่วนใหญ่ที่ต้องการ NUMBER เป็นจำนวนเต็มที่นี่ NUMBER อาจเป็นเลขทศนิยมโดยพลการ


10

มีสองคำตอบที่ยอดเยี่ยมอยู่แล้ว แต่ฉันต้องการที่จะขยายตัวเล็กน้อย คัดลอกและวางคำสั่งด้านล่างในเทอร์มินัลของคุณ:

$ sleep 3d 5h 7m 30.05s &
[1] 7321

ขั้นตอนนี้จะเริ่มกระบวนการที่สองซึ่งจะพักเป็นเวลา 3 วัน 5 ชั่วโมง 7 นาทีและ 30.05 วินาที ID กระบวนการ (PID) อยู่7321ในกรณีของฉัน

เพื่อยืนยันการใช้ PID

$ ps aux | grep sleep
rick      7321  0.0  0.0  14356   660 pts/2    S    22:40   0:00 sleep 3d 5h 7m 30.05s
root     12415  0.0  0.0  14356   700 ?        S    22:41   0:00 sleep 60
rick     12500  0.0  0.0  21292   968 pts/2    R+   22:41   0:00 grep --color=auto sleep

รายการแรกคือรายการที่เราสนใจรายการที่สองมีไว้สำหรับโปรแกรมถาวรที่ฉันใช้ในการเริ่มต้น รายการที่สามใช้สำหรับคำสั่ง grep เอง

ตอนนี้เพื่อดูเวลาที่เหลืออยู่ (เป็นวินาที) สำหรับsleepคำสั่งที่สร้างโดย PID 7321เราสามารถใช้สิ่งนี้: วิธีการกำหนดระยะเวลาที่เหลือใน "sleep"? คำสั่ง:

$ remaining_sleep_time 7321
277304.05
$ remaining_sleep_time 7321
277296.05
$ remaining_sleep_time 7321
277262.05

รหัสสำหรับคำสั่งที่คุณสามารถรวมไว้ใน~/.bashrcไฟล์ของคุณ:

remaining_sleep_time() { # arg: pid
  ps -o etime= -o args= -p "$1" | perl -MPOSIX -lane '
    %map = qw(d 86400 h 3600 m 60 s 1);
    $F[0] =~ /(\d+-)?(\d+:)?(\d+):(\d+)/;
    $t = -($4+60*($3+60*($2+24*$1)));
    for (@F[2..$#F]) {
      s/\?//g;
      ($n, $p) = strtod($_);
      $n *= $map{substr($_, -$p)} if $p;
      $t += $n
    }
    print $t'
}

เวลาที่เหลือของฉันไม่ทำงาน andy @ 7_ ~ $ left_sleep_time 7321 left_sleep_time: ไม่พบคำสั่ง
fixit7

1
@ fixit7 remaining_sleep_timeจะต้องคัดลอกไปยัง~/.bashrcไฟล์ของคุณตามลิงค์ คุณสามารถใส่รหัสลงในไฟล์สคริปต์ทุบตี
WinEunuuchs2Unix

5

การนอนหลับของคำสั่งนั้นจะนับในไม่กี่วินาที คุณสามารถใช้ ((7x60) +30) วินาทีแล้วพิมพ์เพียง:

นอนหลับ 450


3
ตามที่ระบุไว้ก่อนหน้านี้การนอนหลับย่อมเข้าใจวินาทีเสมอ แต่ในกรณีของ GNU sleep และ Bash shell (ไม่แน่ใจเกี่ยวกับ ksh และ zsh) - สิ่งเหล่านี้ยังอนุญาตให้มีการขัดแย้งตัวอักษรตามที่ระบุไว้ในคำตอบอื่น ๆ คำตอบของคุณอาจได้รับการปรับปรุงด้วยการใช้การขยายตัวทางคณิตศาสตร์ของเชลล์ดังนั้นจึงsleep $((60*7))สามารถใช้บางสิ่งบางอย่างเช่นนาที
Sergiy Kolodyazhnyy
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.