Utilisez le sommeil avec des minutes et des secondes

16

Je sais utiliser 5m de sommeil pendant 5 minutes.

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

fixit7
la source

Réponses:

32

Depuis la page de manuel :

Étant donné deux arguments ou plus, faites une pause pendant la durée spécifiée par la somme de leurs valeurs .

Donc:

sleep 7m 30s
PerlDuck
la source
2
Bien, je dois lire les pages de manuel plus attentivement ...
Ravexina
4
Il peut être intéressant de noter qu'il s'agit d'un comportement bashintégré et GNU sleep. POSIXly, sleepest uniquement requis pour comprendre les entiers comme des secondes
Sergiy Kolodyazhnyy
17

Une autre façon de procéder est:

sleep 7.5m

man sleep

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

Ravexina
la source
10

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

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

Cela démarrera un deuxième processus qui dormira pendant 3 jours, 5 heures, 7 minutes et 30,05 secondes. L'ID de processus (PID) est 7321dans 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 j'ai en cours de 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 sleepcommande générée par PID, 7321nous pouvons utiliser ceci: Comment déterminer le temps restant dans un «sommeil»? commander:

$ 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 ~/.bashrcfichier:

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
la source
Mon temps restant ne fonctionne pas. andy @ 7_ ~ $ remaining_sleep_time 7321 remaining_sleep_time: command not found
fixit7
1
@ fixit7 remaining_sleep_timedoit être copié dans votre ~/.bashrcfichier selon le lien. Vous pouvez également placer le code dans un fichier de script bash.
WinEunuuchs2Unix
5

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

dormir 450

dschinn1001
la source
3
Comme indiqué précédemment , le sommeil comprend en effet toujours les secondes, mais en cas de sommeil GNU et de shell Bash (pas sûr de ksh et zsh) - ceux-ci permettent également des arguments de lettres comme indiqué dans d'autres réponses. Votre réponse pourrait être améliorée en utilisant l'expansion arithmétique de la coquille, donc quelque chose comme sleep $((60*7))pourrait être utilisé pendant des minutes
Sergiy Kolodyazhnyy