Avaliar data no horário agendado do comando “at”

0

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 eu configurei o comando AT e não a data de execução.

O que posso fazer para exibir o tempo 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 executar em 16:00 com ./script.sh 23:20 , a tarefa será executada em 23:20 , mas no arquivo de log eu recebo END : (16:00)

Qualquer ajuda será apreciada.

    
por Ould Abba 06.06.2018 / 20:34

1 resposta

0

date é executado quando o script é executado porque a sintaxe '…' está entre aspas duplas. Também está dentro de aspas simples internas, mas as citações mais externas contam. O resultado é at não "ver" 'date …' , mas sua saída.

Faça as aspas externas simples e internas entre aspas duplas. at obterá a string inteira como está. Quando for a hora certa, 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"
'

Note que eliminei as aspas simples mais internas ( '+%H:%M' ). Na minha versão eles desapareceriam enquanto passavam a string para at ; o código funciona sem eles de qualquer maneira.

    
por 06.06.2018 / 20:51

Tags