8

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

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

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

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

edit Из-за характера того, что я делаю, я ищу решение "спать до T", а не "выполнить команду при T".

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

3 ответа3

12

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

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

(1700 - это 5 вечера, а -j говорит, что дата не должна быть установлена)

9

Как насчет этого (объединение идей 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
8

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

at 05:00 some_command

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .