
我使用腳本檔案使用 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
;時,它們會消失。無論如何,程式碼在沒有它們的情況下也可以工作。