Usa el sueño con minutos y segundos

16

Sé cómo usar el sueño 5m durante 5 minutos.

¿Cómo lo usaría durante unos 7 minutos y 30 segundos?

fixit7
fuente

Respuestas:

32

Desde la página del manual :

Dados dos o más argumentos, haga una pausa por la cantidad de tiempo especificada por la suma de sus valores .

Entonces:

sleep 7m 30s
PerlDuck
fuente
2
Agradable, tengo que leer las páginas del manual con más cuidado ...
Ravexina
44
Vale la pena señalar que este es bashun sleep comportamiento incorporado y GNU . POSITIVAMENTE, sleepsolo se requiere entender los enteros como segundos
Sergiy Kolodyazhnyy
17

Otra forma de hacer esto es:

sleep 7.5m

man sleep

A diferencia de la mayoría de las implementaciones que requieren que NUMBER sea un número entero, aquí NUMBER puede ser un número arbitrario de coma flotante.

Ravexina
fuente
10

Ya hay dos respuestas excelentes, pero me gustaría ampliar un poco. Copie y pegue el siguiente comando en su terminal:

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

Esto iniciará un segundo proceso que dormirá durante 3 días, 5 horas, 7 minutos y 30.05 segundos. El ID de proceso (PID) está 7321en mi caso.

Para confirmar el uso de 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 primera entrada es la que nos interesa. La segunda entrada es para un programa permanente que tengo ejecutándose en el inicio. La tercera entrada es para el comando grep en sí.

Ahora para ver cuánto tiempo queda (en segundos) para el sleepcomando generado por PID 7321, podemos usar esto: ¿Cómo determinar la cantidad de tiempo que queda en un "sueño"? mando:

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

El código para el comando que puede incluir en su ~/.bashrcarchivo:

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
fuente
Mi tiempo restante no está funcionando. andy @ 7_ ~ $ restantes_sleep_time 7321 restantes_sleep_time: comando no encontrado
fixit7
1
@ fixit7 remaining_sleep_timedebe copiarse en su ~/.bashrcarchivo según el enlace. También puede poner el código en un archivo de script bash.
WinEunuuchs2Unix
5

El comando dormir siempre cuenta en segundos. Puede usar ((7x60) +30) segundos y luego escribir simplemente:

dormir 450

dschinn1001
fuente
3
Como se señaló anteriormente , dormir de hecho siempre comprende los segundos, pero en el caso de GNU sleep y Bash shell (no estoy seguro acerca de ksh y zsh), estos también permiten argumentos de letras como se señala en otras respuestas. Su respuesta podría mejorarse con el uso de la expansión aritmética de shell, por lo que algo así sleep $((60*7))podría usarse durante minutos
Sergiy Kolodyazhnyy