在「at」指令預定時間評估日期

在「at」指令預定時間評估日期

我使用腳本檔案使用 AT 命令執行一些任務,但在日誌檔案中回顯的日期是我設定 AT 命令時的日期而不是執行日期。

如何顯示執行結束的實際時間?

這是我的腳本文件內容:

logFILE="/tmp/loggfile.log"

if [[ -z "$1" ]]; then echo "Please specify the run time, HH:MM "; exit 1; fi
runTIME=$1

at $runTIME <<< "
echo 'Running a task....'
echo 'An other task....'
echo 'END : (`date '+%H:%M'`)' >>$logFILE
"
echo "The command was scheduled to run at $runTIME"

如果我運行它16:00./script.sh 23:20任務將在23:20但在日誌檔中我得到END : (16:00)

任何幫助將不勝感激。

答案1

date當腳本運行時執行,因為`…`語法位於雙引號內。它也在內部單引號內,但最外部的引號也算在內。結果at不是「看到」`date …`而是它的輸出。

使外引號為單引號,內引號為雙引號。at將按原樣獲取整個字串。當時間合適時,它將運行sh,並將`date …`在雙引號中看到,然後date才會進行評估:

at "$runTIME" <<< '
echo "Running a task...."
echo "An other task...."
echo "END : (`date +%H:%M`)" >>"$logFILE"
'

請注意,我刪除了最裡面的單引號 ( '+%H:%M')。在我的版本中,當將字串傳遞給at;時,它們會消失。無論如何,程式碼在沒有它們的情況下也可以工作。

相關內容