
Ich verwende eine Skriptdatei, um einige Aufgaben mit dem AT-Befehl auszuführen, aber das in der Protokolldatei angezeigte Datum ist das Datum, an dem ich den AT-Befehl eingerichtet habe, und nicht das Ausführungsdatum.
Was kann ich tun, um den tatsächlichen Zeitpunkt des Ausführungsendes anzuzeigen?
Dies ist der Inhalt meiner Skriptdatei:
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"
Wenn ich es ausführe bei16:00mit ./script.sh 23:20
wird die Aufgabe ausgeführt bei23:20aber in der Protokolldatei bekomme ichEND : (16:00)
Jede Hilfe wird geschätzt.
Antwort1
date
wird ausgeführt, wenn das Skript ausgeführt wird, da `…`
die Syntax in doppelten Anführungszeichen steht. Es steht auch in einfachen Anführungszeichen, aber die äußersten Anführungszeichen zählen. Das Ergebnis ist at
nicht „sehen“, `date …`
sondern seine Ausgabe.
Machen Sie die äußeren Anführungszeichen einfach, die inneren doppelt. Dadurch at
wird der gesamte String so wie er ist abgerufen. Wenn die Zeit reif ist, wird es ausgeführt sh
, was die doppelten Anführungszeichen anzeigt `date …`
und erst dann date
ausgewertet wird:
at "$runTIME" <<< '
echo "Running a task...."
echo "An other task...."
echo "END : (`date +%H:%M`)" >>"$logFILE"
'
Beachten Sie, dass ich die meisten inneren einfachen Anführungszeichen ( '+%H:%M'
) entfernt habe. In meiner Version würden sie beim Übergeben der Zeichenfolge an verschwinden at
; der Code funktioniert trotzdem ohne sie.