Bash
睡眠直到下一次出現特定時間
我需要一系列命令或單個命令,直到下一次出現特定時間(如“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