Unix:睡眠直到指定時間

Unix:睡眠直到指定時間

是否有一個(半)標準 Unix 命令可以休眠直到其命令列上指定的時間?換句話說,我正在尋找類似的東西sleep,需要喚醒時間而不是持續時間。

例如:sleeptill 05:00:00

我可以編寫一些程式碼,但如果已經有東西存在,我寧願不重新發明輪子。

額外問題:如果它可以使用時區(如sleeptill 05:00:00 America/New_York),那就太好了。

編輯由於我正在做的事情的性質,我正在尋找“睡眠直到 T”而不是“在 T 運行命令”解決方案。

編輯為了避免疑問,如果我在 18:00 運行命令並告訴它在 17:00 喚醒,我預計它會休眠 23 小時(或者,在某些與夏令時有關的極端情況下,對於22 或 24 小時。)

答案1

如果您使用的 Unix 具有不錯的日期命令並且正在使用 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 環境變數指定其他時區。

相關內容