Durma com minutos e segundos


15

Eu sei como dormir 5m por 5 minutos.

Como eu o usaria por 7 minutos e 30 segundos?

Respostas:


31

Na página de manual :

Dados dois ou mais argumentos, faça uma pausa pela quantidade de tempo especificada pela soma de seus valores .

Então:

sleep 7m 30s

2
Bom, eu tenho que ler páginas man mais cuidado ...
Ravexina

4
Pode ser interessante notar que esse é bashum sleep comportamento interno e GNU . POSIXly, sleepé necessário entender apenas números inteiros como segundos #
Sergiy Kolodyazhnyy 13/08/18

17

Outra maneira de fazer isso é:

sleep 7.5m

man sleep

Diferente da maioria das implementações que exigem NUMBER como um número inteiro, aqui NUMBER pode ser um número de ponto flutuante arbitrário.


10

Já existem duas excelentes respostas, mas eu gostaria de expandir um pouco. Copie e cole o comando abaixo em seu terminal:

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

Isso iniciará um segundo processo que dormirá por 3 dias, 5 horas, 7 minutos e 30,05 segundos. O ID do processo (PID) está 7321no meu caso.

Para confirmar o uso do 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

A primeira entrada é a que nos interessa. A segunda entrada é para um programa permanente em execução na inicialização. A terceira entrada é para o próprio comando grep.

Agora, para ver quanto tempo resta (em segundos) para o sleepcomando gerado pelo PID 7321, podemos usar o seguinte: Como determinar a quantidade de tempo restante em uma "suspensão"? comando:

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

O código para o comando que você pode incluir no seu ~/.bashrcarquivo:

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'
}

Meu tempo restante não está funcionando. andy @ 7_ ~ $ restantes_sleep_time 7321 restantes_sleep_time: comando não encontrado
fixit7

11
@ fixit7 remaining_sleep_timeprecisa ser copiado para o seu ~/.bashrcarquivo de acordo com o link. Você também pode colocar o código em um arquivo de script bash.
WinEunuuchs2Unix 12/08/18

5

O comando sleep está sempre contando em segundos. Você pode usar ((7x60) +30) segundos e digitar simplesmente:

sono 450


3
Como observado anteriormente , sleep realmente sempre compreende segundos, mas no caso de GNU sleep e Bash shell (não tenho certeza sobre ksh e zsh) - eles também permitem argumentos de letra, conforme observado em outras respostas. A sua resposta poderia ser melhorado com o uso de shell expansão aritmética, então algo como sleep $((60*7))poderia ser usado para minutos
Sergiy Kolodyazhnyy
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.