
¿Existe un comando Unix (semi) estándar que entre en suspensión hasta el tiempo especificado en su línea de comando? En otras palabras, estoy buscando algo similar sleep
que requiera tiempo para despertarse en lugar de duración.
Por ejemplo:sleeptill 05:00:00
Puedo codificar algo, pero preferiría no reinventar la rueda si ya existe algo por ahí.
Pregunta adicional: sería fantástico si pudiera tomar la zona horaria (como en sleeptill 05:00:00 America/New_York
).
editarDebido a la naturaleza de lo que estoy haciendo, estoy buscando una solución de "dormir hasta T" en lugar de "ejecutar comando en T".
editarPara evitar dudas, si ejecuto el comando a las 18:00 y le digo que se despierte a las 17:00, espero que duerma durante 23 horas (o, en algunos casos extremos que tienen que ver con el horario de verano, por ejemplo). 22 o 24 horas.)
Respuesta1
Si estás en un Unix que tiene un comando de fecha decente y estás usando bash, puedes usar el %s
formato para calcular el tiempo.
sleep $(( $(date -j 1700 +%s) - $(date +%s) ))
1700
siendo las 5 p.m.-j
decir la fecha para no fijar la fecha.
Respuesta2
¿Qué tal esto (combinar las ideas de w00t y Gille en una función)?
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
Respuesta3
Echa un vistazo a Linux/Unix.at
dominio. Usando el ejemplo de las 5 a. m.:
at 05:00 some_command
También admite zonas horarias:
Puede seguir un nombre de zona horaria GMT, UCT o ZULU (sin distinguir entre mayúsculas y minúsculas) para especificar que la hora está en tiempo universal coordinado. Se pueden especificar otras zonas horarias utilizando la variable de entorno TZ.