Je sais comment dormir 5m pendant 5 minutes.
Comment pourrais-je l'utiliser pendant environ 7 minutes 30 secondes?
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
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.
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'
}
Le sommeil de commande compte toujours en secondes. Vous pouvez utiliser ((7x60) +30) secondes puis taper simplement:
dormir 450