Unix: dormir até o tempo especificado

8

Existe um comando (semi-) padrão do Unix que duraria até o horário especificado em sua linha de comando? Em outras palavras, estou procurando algo semelhante a sleep que levaria tempo de ativação em vez de duração.

Por exemplo: sleeptill 05:00:00

Eu posso codificar algo, mas prefiro não reinventar a roda se já houver algo por aí.

Pergunta de bônus: seria ótimo se pudesse levar o fuso horário (como em sleeptill 05:00:00 America/New_York ).

edit Devido à natureza do que estou fazendo, estou procurando uma solução "sleep until T" em vez de "run command at T".

edit Para evitar dúvidas, se eu executar o comando às 18:00 e dizer para ele acordar às 17:00, espero que ele durma por 23 horas (ou, em alguns casos de canto que têm a ver com o horário de verão, por 22 ou 24 horas.)

    
por NPE 15.12.2010 / 11:24

3 respostas

12

Se você estiver em um Unix que tenha um comando de data decente e esteja usando o bash, você pode usar o formato% s para calcular o tempo.

sleep $(( $(date -j 1700 +%s) - $(date +%s) ))

(1700 sendo 5PM e -j dizendo a data para não definir a data)

    
por 15.12.2010 / 12:17
9

Que tal isso (combinando as idéias de w00t e Gille em uma função)?

function sleep_until {
  seconds=$(( $(date -d "$*" +%s) - $(date +%s) )) # Use $* to eliminate need for quotes
  echo "Sleeping for $seconds seconds"
  sleep $seconds
}

Uso:

sleep_until 8:24
Sleeping for 35 seconds

sleep_until '23:00'
Sleeping for 52489 seconds

sleep_until 'tomorrow 1:00'
Sleeping for 59682 seconds
    
por 04.10.2012 / 17:28
8

Confira o comando at do linux / unix . Usando o exemplo de 5AM:

at 05:00 some_command

Também suporta fusos horários:

A timezone name of GMT, UCT or ZULU (case insensitive) can follow to specify that the time is in Coordinated Universal Time. Other timezones can be specified using the TZ environment variable.

    
por 15.12.2010 / 11:45