Unix: сон до указанного времени

Unix: сон до указанного времени

Есть ли (полу)стандартная команда Unix, которая будет спать до времени, указанного в ее командной строке? Другими словами, я ищу что-то похожее, sleepчто будет использовать время пробуждения, а не длительность.

Например:sleeptill 05:00:00

Я могу что-то закодировать, но предпочитаю не изобретать велосипед, если что-то уже есть.

Бонусный вопрос: было бы здорово, если бы можно было учитывать часовой пояс (например, sleeptill 05:00:00 America/New_York).

редактироватьВвиду специфики моей деятельности я ищу решение «спать до Т», а не «выполнить команду в Т».

редактироватьВо избежание сомнений, если я запущу команду в 18:00 и скажу проснуться в 17:00, я ожидаю, что она будет спать 23 часа (или, в некоторых особых случаях, связанных с летним временем, 22 или 24 часа).

решение1

Если вы работаете в Unix, где есть хорошая команда date, и используете bash, вы можете использовать этот %sформат для вычисления времени.

sleep $(( $(date -j 1700 +%s) - $(date +%s) ))
  • 1700сейчас 5 вечера.
  • -jуказание даты не означает, что нужно устанавливать дату.

решение2

А как насчет этого (объединения идей w00t и Gille в одну функцию)?

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

Использование:

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

решение3

Проверьте Linux/Unixatкоманда. Используя пример 5 утра:

at 05:00 some_command

Он также поддерживает часовые пояса:

Имя часового пояса GMT, UCT или ZULU (без учета регистра) может следовать за указанием времени по всемирному координированному времени. Другие часовые пояса могут быть указаны с помощью переменной среды TZ.

Связанный контент