Bash

睡眠直到下一次出現特定時間

  • September 11, 2015

我需要一系列命令或單個命令,直到下一次出現特定時間(如“4:00”)發生。

我該怎麼做?

命令或 cronjob 不是一個選項,at因為我不能離開我目前所在的腳本。

我正在談論的具體案例是在螢幕中執行的腳本。非常重要的是,我不會通過腳本本身停止腳本的執行,因為在腳本的某個點需要儲存許多重要的變數。該腳本並不總是應該定期執行。它只需要在特定時間執行。

如果腳本必須創建任何文件或任何其他任務,例如 cronjobs 或其他螢幕,那將是非常有益的。這只是一個設計問題。

我剛剛有一個很棒的想法:

difference=$(($(date -d "4:00" +%s) - $(date +%s)))

if [ $difference -lt 0 ]
then
   sleep $((86400 + difference))
else
   sleep $difference
fi

你有更好的想法嗎?

如果需要,將添加更多資訊!

terdon 的建議可行,但我想我的建議更有效。

difference=$(($(date -d "4:00" +%s) - $(date +%s)))

if [ $difference -lt 0 ]
then
   sleep $((86400 + difference))
else
   sleep $difference
fi

這是計算給定時間和目前時間之間的差異(以秒為單位)。如果這個數字是負數,我們必須添加一整天的秒數(準確地說是 86400)才能得到我們必須睡覺的秒數,如果這個數字是正數,我們就可以使用它。

假設它是一個 shell 腳本,這應該可以工作:

while [ $(date +%H:%M) != "04:00" ]; do sleep 1; done

那是24小時的時間。如果您希望這在凌晨 4:00 和下午 4:00 都繼續,請改用:

while [ $(date +%I:%M) != "04:00" ]; do sleep 1; done

引用自:https://unix.stackexchange.com/questions/94518