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命令. 以 5AM 为例:

at 05:00 some_command

它还支持时区:

后面可以跟上时区名称 GMT、UCT 或 ZULU(不区分大小写),以指定时间为协调世界时。可以使用 TZ 环境变量指定其他时区。

相关内容