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.