
Utilizo un archivo de secuencia de comandos para ejecutar algunas tareas usando el comando AT, pero en el archivo de registro la fecha que se repite es la fecha en la que configuré el comando AT, no la fecha de ejecución.
¿Qué puedo hacer para mostrar la hora real de finalización de la ejecución?
Este es el contenido de mi archivo 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"
Si lo ejecuto en16:00con ./script.sh 23:20
, la tarea se ejecutará en23:20pero en el archivo de registro me saleEND : (16:00)
Cualquier ayuda será apreciada.
Respuesta1
date
se ejecuta cuando se ejecuta el script porque `…`
la sintaxis está entre comillas dobles. También está entre comillas simples internas, pero cuentan la mayoría de las comillas externas. El resultado at
no es "ve" `date …`
sino su salida.
Haga que las comillas externas sean simples y las internas dobles. at
Obtendrá toda la cadena tal como está. Cuando sea el momento adecuado se ejecutará, sh
lo cual se verá `date …`
entre comillas dobles y solo entonces date
se evaluará:
at "$runTIME" <<< '
echo "Running a task...."
echo "An other task...."
echo "END : (`date +%H:%M`)" >>"$logFILE"
'
Tenga en cuenta que eliminé las comillas simples más internas ( '+%H:%M'
). En mi versión, desaparecerían al pasar la cadena a at
; el código funciona sin ellos de todos modos.