Gunakan tidur dengan menit dan detik

16

Saya tahu cara menggunakan sleep 5m selama 5 menit.

Bagaimana saya menggunakannya untuk mengatakan 7 menit 30 detik?

fixit7
sumber

Jawaban:

32

Dari halaman manual :

Diberikan dua atau lebih argumen, jeda untuk jumlah waktu yang ditentukan oleh jumlah nilainya .

Begitu:

sleep 7m 30s
PerlDuck
sumber
2
Bagus, saya harus membaca halaman manual lebih hati-hati ...
Ravexina
4
Mungkin perlu dicatat bahwa ini adalah perilaku bashbawaan dan GNU sleep. POSIXly, sleephanya diperlukan untuk memahami bilangan bulat sebagai detik
Sergiy Kolodyazhnyy
17

Cara lain untuk melakukan ini adalah:

sleep 7.5m

man sleep

Tidak seperti kebanyakan implementasi yang membutuhkan NUMBER menjadi bilangan bulat, di sini NUMBER dapat berupa angka floating point yang berubah-ubah.

Ravexina
sumber
10

Sudah ada dua jawaban bagus tetapi saya ingin sedikit memperluas. Salin dan tempel perintah di bawah ini ke terminal Anda:

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

Ini akan memulai proses kedua yang akan tidur selama 3 hari, 5 jam, 7 menit dan 30,05 detik. ID proses (PID) ada 7321dalam kasus saya.

Untuk mengkonfirmasi penggunaan 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

Entri pertama adalah yang kami minati. Entri kedua adalah untuk program permanen yang saya jalankan di startup. Entri ketiga adalah untuk perintah grep itu sendiri.

Sekarang untuk melihat berapa banyak waktu yang tersisa (dalam detik) untuk sleepperintah yang dihasilkan oleh PID 7321kita dapat menggunakan ini: Bagaimana menentukan jumlah waktu yang tersisa dalam "tidur"? perintah:

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

Kode untuk perintah yang dapat Anda sertakan dalam ~/.bashrcfile Anda :

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'
}
WinEunuuchs2Unix
sumber
Sisa waktu saya tidak berfungsi. andy @ 7_ ~ $ Sisa_sleep_time 7321
Sisa_sleep_time
1
@ fixit7 remaining_sleep_timeperlu disalin ke ~/.bashrcfile Anda sesuai tautan. Anda juga bisa memasukkan kode ke file skrip bash.
WinEunuuchs2Unix
5

Command sleep selalu dihitung dalam hitungan detik. Anda bisa menggunakan ((7x60) +30) detik dan mengetik:

tidur 450

dschinn1001
sumber
3
Seperti disebutkan sebelumnya , sleep memang selalu mengerti detik, tetapi dalam kasus GNU sleep dan Bash shell (tidak yakin tentang ksh dan zsh) - itu juga memungkinkan argumen huruf seperti yang dicatat dalam jawaban lain. Jawaban Anda dapat ditingkatkan dengan menggunakan ekspansi aritmatika shell, jadi sesuatu seperti sleep $((60*7))dapat digunakan selama beberapa menit
Sergiy Kolodyazhnyy