Використовуйте сон з хвилинами та секундами


16

Я знаю, як використовувати сон 5м протягом 5 хвилин.

Як би я скористався ним, наприклад, 7 хвилин 30 секунд?

Відповіді:


32

З сторінки керівництва :

Надаючи два чи більше аргументів, зробіть паузу на кількість часу, визначену сумою їх значень .

Так:

sleep 7m 30s

2
Приємно, я мушу більш уважно читати сторінки чоловіка ...
Ravexina

4
Можна зауважити, що це bashвбудована sleep поведінка та GNU . POSIXly sleepпотрібно лише для розуміння цілих чисел як секунд
Сергій Колодяжний,

17

Ще один спосіб зробити це:

sleep 7.5m

man sleep

На відміну від більшості реалізацій, для яких потрібно NUMBER бути цілим числом, тут NUMBER може бути довільним номером з плаваючою комою.


10

Вже є два чудових відповіді, але я хотів би трохи розширити. Скопіюйте та вставте команду нижче у свій термінал:

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

Це запустить другий процес, який буде спати 3 дні, 5 годин, 7 хвилин і 30,05 секунди. Ідентифікатор процесу (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ми можемо скористатися цим: Як визначити кількість часу, що залишився у режимі сну? команда:

$ 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_ ~ $
preosta_sleep_time

1
@ fixit7 remaining_sleep_timeпотрібно скопіювати у ваш ~/.bashrcфайл за посиланням. Ви також можете помістити код у файл скрипту bash.
WinEunuuchs2Unix

5

Командний сон завжди рахується за секунди. Ви можете використовувати ((7x60) +30) секунд, а потім просто ввести:

сон 450


3
Як зазначалося раніше , сон насправді завжди розуміє секунди, але у випадку сну GNU та оболонки Bash (не впевнений у ksh та zsh) - це також дозволяє аргументи з букви, як зазначено в інших відповідях. Вашу відповідь можна було б покращити за допомогою арифметичного розширення оболонки, тож щось подібне sleep $((60*7))можна було використати хвилин
Сергій Колодяжний,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.