
Я использую файл скрипта для запуска некоторых задач с помощью команды 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
; код в любом случае работает без них.