web-dev-qa-db-fra.com

Utilisez le sommeil avec des minutes et des secondes

Je sais comment dormir 5m pendant 5 minutes.

Comment pourrais-je l'utiliser pendant environ 7 minutes 30 secondes?

15
fixit7

De la page de manuel :

Avec deux arguments ou plus, mettez en pause pendant la durée spécifiée par la somme de leurs valeurs .

Alors:

sleep 7m 30s
31
PerlDuck

Une autre façon de faire est:

sleep 7.5m
man sleep

Contrairement à la plupart des implémentations qui exigent que NUMBER soit un entier, NUMBER peut être un nombre à virgule flottante arbitraire.

17
Ravexina

Il y a déjà deux excellentes réponses, mais j'aimerais développer un peu. Copiez et collez la commande ci-dessous dans votre terminal:

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

Cela lancera un deuxième processus qui durera 3 jours, 5 heures, 7 minutes et 30,05 secondes. L'ID de processus (PID) est 7321 dans mon cas.

Pour confirmer l'utilisation du 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

La première entrée est celle qui nous intéresse. La deuxième entrée concerne un programme permanent que je lance au démarrage. La troisième entrée concerne la commande grep elle-même.

Maintenant, pour voir combien de temps il reste (en secondes) pour la commande sleep générée par le PID 7321, nous pouvons utiliser ceci: Comment déterminer le temps qui reste dans une "veille"? commande:

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

Le code de la commande que vous pouvez inclure dans votre fichier ~/.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'
}
9
WinEunuuchs2Unix

Le sommeil de commande compte toujours en secondes. Vous pouvez utiliser ((7x60) +30) secondes puis taper simplement:

dormir 450

4
dschinn1001