Existe um comando (semi-) padrão do Unix que duraria até o tempo especificado em sua linha de comando? Em outras palavras, estou procurando algo semelhante ao 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 lá fora.
Pergunta do 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 "durma até T" em vez de "executar comando em T".
edit Para evitar dúvidas, se eu executar o comando às 18:00 e pedir para que ele acorde às 17:00, espero que ele durma por 23 horas (ou, em alguns casos de canto relacionados ao horário de verão, por 22 ou 24 horas.)
cron
, eu acho.sleep
parecido.Respostas:
Se você estiver em um Unix com um comando de data decente e estiver usando o bash, poderá usar o formato% s para calcular o tempo.
(1700 sendo 17:00 e -j informando a data para não definir a data)
fonte
-j
que-d
. Para executá-lo em meus sistemas Linux]date -d 'tomorrow 17:00'
.echo $(( ($(date -d "3:00" +%s) - $(date +%s) + (60*60*24)) % (60*60*24) ))
(pode haver apenas algumas questões em torno de Hora de Verão alterações)Que tal isso (combinar as idéias de w00t e Gille em uma função)?
Uso:
fonte
Confira o
at
comando linux / unix . Usando o exemplo 05:00:at 05:00 some_command
Ele também suporta fusos horários:
fonte
cron
ouat
, mas seria difícil administrar. É por isso que estou procurando algosleep
parecido. Por enquanto, eu escrevi o meu.