在“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;无论如何,即使没有它们,代码也可以正常工作。

相关内容