如何在给定的日期和时间之前睡觉?

use*_*ser 6 shell sleep shell-script date time

我想写一个给定日期(天-小时-分钟)的外壳,例如

10:00 AM Sun
2:30 PM Mon
...
Run Code Online (Sandbox Code Playgroud)

它一直睡到那个确切的日期和时间。我认为一种方法是,我可以获得当前日期并计算差异?然后将其转换为秒并在该时间内睡眠。

但是,我不太确定如何使用 shell 脚本来做到这一点?

#!/bin/bash

now=$(date '+%A %W %Y %X')
date =  2:30 PM Mon

difference = ??
sleep difference
Run Code Online (Sandbox Code Playgroud)

Mel*_*lan 8

如果允许用户使用at命令,这是完美的用法:

$ at 08:00 022116
at> myscript.sh
at>      <----------- ctrl-d here
job 9 at 2016-02-21 08:00
Run Code Online (Sandbox Code Playgroud)

如果您收到类似“用户 blah 无法运行at”的消息,请要求系统管理员将此用户添加到at.allow文件或从at.deny文件中删除,具体取决于它在您的环境中的使用方式。

当然,除非您希望这天长时间的睡眠发生在您的脚本中间。即使这样,您也可以将脚本分成两部分,将要保留的变量写入一个文件,当时间到了并且脚本的第二部分执行时,它可以从存储的文件中读取这些变量。