Datum zum geplanten Zeitpunkt des Befehls „at“ auswerten

Datum zum geplanten Zeitpunkt des Befehls „at“ auswerten

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:20wird die Aufgabe ausgeführt bei23:20aber in der Protokolldatei bekomme ichEND : (16:00)

Jede Hilfe wird geschätzt.

Antwort1

datewird 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 atnicht „sehen“, `date …`sondern seine Ausgabe.

Machen Sie die äußeren Anführungszeichen einfach, die inneren doppelt. Dadurch atwird 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 dateausgewertet 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.

verwandte Informationen