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

0

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .