Оценить дату в команде "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; код в любом случае работает без них.

Связанный контент