
是否有一個(半)標準 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 環境變數指定其他時區。