
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 at
não "vê", `date …`
mas sim sua saída.
Faça aspas externas simples e as internas duplas. at
obterá a string inteira como está. Quando chegar a hora certa ele será executado sh
que verá `date …`
entre aspas duplas e só então date
será 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.