Avaliar a data no horário agendado do comando "at"

Avaliar a data no horário agendado do comando "at"

Eu uso um arquivo de script para executar algumas tarefas usando o comando AT, mas no arquivo de log a data ecoada é a data em que configurei o comando AT, não a data de execução.

O que posso fazer para exibir a hora real de término da execução?

Este é o conteúdo do meu arquivo de script:

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"

Se eu executá-lo em16:00com ./script.sh 23:20, a tarefa será executada em23:20mas no arquivo de log eu receboEND : (16:00)

Qualquer ajuda será apreciada.

Responder1

dateé executado quando o script é executado porque `…`a sintaxe está entre aspas duplas. Também está entre aspas simples internas, mas as aspas mais externas contam. O resultado atnão "vê", `date …`mas sim sua saída.

Faça aspas externas simples e as internas duplas. atobterá a string inteira como está. Quando chegar a hora certa ele será executado shque verá `date …`entre aspas duplas e só então dateserá avaliado:

at "$runTIME" <<< '
echo "Running a task...."
echo "An other task...."
echo "END : (`date +%H:%M`)" >>"$logFILE"
'

Observe que deixei cair as aspas simples mais internas ( '+%H:%M'). Na minha versão, eles desapareceriam ao passar a string para at; o código funciona sem eles de qualquer maneira.

informação relacionada