Ich habe ein Skript, das einen Get-Befehl ausführt und die Ausgabe in einer Variable namens newvalue
und einer weiteren Variable namens speichert oldvalue
(manuell darin ein Wert gespeichert). Dann subtrahiert das Skript newvalue - oldvalue
und speichert das Ergebnis in einer Variable namens finalvalue
und dem Endwert von Echo. Ich muss dieses Skript alle 4 Stunden mit einem Cron-Job ausführen und eine E-Mail mit einem Echo von senden . Bis hierhin hat alles gut funktioniert. Jetzt möchte ich, dass dieses Skript die Variable mit dem Wert von finalvalue
aktualisiert, sobald das Senden der E-Mail abgeschlossen ist. Bedeutet, dass alle 4 Stunden, wenn das Skript ausgeführt wird, der Wert der Variable mit last geändert werden soll . Bitte schlagen Sie eine Problemumgehung vor.oldvalue
newvalue
oldvalue
newvalue
Antwort1
Wenn Sie ein Skript ausführen, egal ob Sie es von cron
oder direkt in der Befehlszeile ausführen, wird dieses Skript in seiner eigenen "Subshell", in seiner eigenen Umgebung ausgeführt. Alle während der Ausführung des Skripts gesetzten Variablen sind nur sichtbar fürDasSkript, während es ausgeführt wird. Wenn Sie dasselbe Skript dann erneut ausführen, ist es vollständig unabhängig von der ersten Ausführung und es besteht keine Möglichkeit, dass eine Variable aus der ersten Ausführung irgendwie erhalten bleibt und von der zweiten, separaten Ausführung übernommen wird.
Wenn Sie also einen Wert über mehrere Instanzen des Skripts hinweg beibehalten müssen, müssen Sie ihn in einer temporären Datei speichern. Fügen Sie Ihrem Skript einfach etwas wie das Folgende hinzu:
oldValue=$(cat /path/to/temp/file);
newValue=$(whatever gives you the new value)
finalValue=$((newvalue - oldvalue))
echo "$finalValue" > /path/to/temp/file