是否有 (半) 标准 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
命令. 以 5AM 为例:
at 05:00 some_command
它还支持时区:
后面可以跟上时区名称 GMT、UCT 或 ZULU(不区分大小写),以指定时间为协调世界时。可以使用 TZ 环境变量指定其他时区。