Sử dụng giấc ngủ với phút và giây


15

Tôi biết cách sử dụng giấc ngủ 5m trong 5 phút.

Làm thế nào tôi có thể sử dụng nó trong 7 phút 30 giây?

Câu trả lời:


31

Từ trang hướng dẫn :

Đưa ra hai hoặc nhiều đối số, tạm dừng trong khoảng thời gian được chỉ định bằng tổng giá trị của chúng .

Vì thế:

sleep 7m 30s

2
Nice, tôi phải đọc các trang người đàn ông cẩn thận hơn ...
Ravexina

4
Có thể đáng lưu ý rằng đây là hành vi tích hợp bashvà GNU sleep. POSIXly, sleepchỉ được yêu cầu hiểu số nguyên dưới dạng giây
Sergiy Kolodyazhnyy

17

Một cách khác để làm điều này là:

sleep 7.5m

man sleep

Không giống như hầu hết các triển khai yêu cầu SỐ là một số nguyên, ở đây SỐ có thể là số dấu phẩy động tùy ý.


10

Có hai câu trả lời xuất sắc nhưng tôi muốn mở rộng một chút. Sao chép và dán lệnh bên dưới vào thiết bị đầu cuối của bạn:

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

Điều này sẽ bắt đầu một quá trình thứ hai sẽ ngủ trong 3 ngày, 5 giờ, 7 phút và 30,05 giây. ID tiến trình (PID) là 7321trong trường hợp của tôi.

Để xác nhận việc sử dụng 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

Mục đầu tiên là mục chúng tôi quan tâm. Mục thứ hai dành cho chương trình vĩnh viễn tôi đang chạy khi khởi động. Mục thứ ba là cho chính lệnh grep.

Bây giờ để xem bao nhiêu thời gian còn lại (tính bằng giây) cho sleeplệnh được tạo bởi PID, 7321chúng ta có thể sử dụng điều này: Làm thế nào để xác định lượng thời gian còn lại trong một giấc ngủ ngủ trưa? chỉ huy:

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

Mã cho lệnh bạn có thể bao gồm trong ~/.bashrctệp của mình :

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'
}

Thời gian còn lại của tôi không hoạt động. andy @ 7_ ~ $ remaining_sleep_time 7321 remaining_sleep_time: command not found
fixit7

1
@ fixit7 remaining_sleep_timecần được sao chép vào ~/.bashrctệp của bạn theo liên kết. Bạn cũng có thể đặt mã vào tệp bash script.
WinEunuuchs2Unix

5

Lệnh ngủ luôn được tính bằng giây. Bạn có thể sử dụng ((7x60) +30) giây và sau đó nhập đơn giản:

ngủ 450


3
Như đã lưu ý trước đây , giấc ngủ thực sự luôn hiểu giây, nhưng trong trường hợp GNU ngủ và Bash shell (không chắc chắn về ksh và zsh) - những điều này cũng cho phép các đối số chữ cái như được ghi chú trong các câu trả lời khác. Câu trả lời của bạn có thể được cải thiện bằng cách sử dụng mở rộng số học shell, do đó, một cái gì đó giống như sleep $((60*7))có thể được sử dụng trong vài phút
Sergiy Kolodyazhnyy
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.