Bra*_*one 12 bash sleep date time
我需要一系列命令或单个命令,直到下一次出现“4:00”等特定时间。
我该怎么做?
该at命令或一个cronjob不是一个选项,因为我不能离开这个剧本目前在我。
我所说的具体情况是在屏幕中运行的脚本。非常重要的是,我不会通过脚本本身停止脚本的执行,因为脚本的某些点需要存储许多重要的变量。脚本并不总是应该以常规方式执行。它只需要在特定时间执行。
如果脚本必须创建任何文件或任何其他任务(例如 cronjobs 或其他屏幕),那将是非常有益的。这只是一个设计问题。
我只是有一个很棒的想法:
difference=$(($(date -d "4:00" +%s) - $(date +%s)))
if [ $difference -lt 0 ]
then
sleep $((86400 + difference))
else
sleep $difference
fi
Run Code Online (Sandbox Code Playgroud)
你有什么更好的想法吗?
如果需要,将添加更多信息!
Bra*_*one 20
terdon 的建议可行,但我想我的建议效率更高。
difference=$(($(date -d "4:00" +%s) - $(date +%s)))
if [ $difference -lt 0 ]
then
sleep $((86400 + difference))
else
sleep $difference
fi
Run Code Online (Sandbox Code Playgroud)
这是计算给定时间和当前时间之间的差异(以秒为单位)。如果数字是负数,我们必须加上一整天的秒数(准确地说是 86400)才能得到我们必须睡觉的秒数,如果数字是正数,我们就可以使用它。
ter*_*don 12
假设它是一个 shell 脚本,这应该可以工作:
while [ $(date +%H:%M) != "04:00" ]; do sleep 1; done
Run Code Online (Sandbox Code Playgroud)
那是24小时的时间。如果您希望在凌晨 4:00 和下午 4:00 继续执行此操作,请改用以下命令:
while [ $(date +%I:%M) != "04:00" ]; do sleep 1; done
Run Code Online (Sandbox Code Playgroud)