Ich habe ein Skript, das rsync verwendet, um Daten in einem entfernten -> lokalen Szenario zu synchronisieren. Unmittelbar nach dem Ausführen des Befehls rsync wird überprüft, ob der Fehlercode gleich Null ist oder nicht. Wenn es Null ist, werden weitere Befehle ausgeführt. Dies berücksichtigt jedoch nicht die Tatsache, dass rsync möglicherweise erfolgreich ausgeführt wurde, aber tatsächlich keine Änderungen vorgenommen hat. Aus diesem Grund wird die Bedingung "Gleich Null" unabhängig davon ausgeführt, was etwas redundant ist.
rsync -aEivm --delete /path/to/remote/ /path/to/local/
if [ $? -eq 0 ]; then
# Success do some more work!
else
# Something went wrong!
exit 1;
fi
Was wäre der beste Ansatz, um dies zu erweitern und zu überprüfen, ob tatsächlich Änderungen basierend auf dem ausgeführten Befehl rsync vorgenommen wurden. Ich habe gelesen, dass das Flag -i die Ausgabe an stdout liefern kann, aber wie kann dies in einem bedingten Block platziert werden?
a=$("rsync command")
. Dies würde den ausführen rsync
Befehl und speichert stdout
in a
. Dann können Sie Tests ama
| grep /
oder ähnliches hinzufügen und dann den Exit-Status von grep mit überprüfen. $?
Es sollte 1 sein, wenn keine Ausgabe vorhanden ist.
-v
, sodass es bereits die Informationen enthält, die Sie zum Stdout benötigen ... z. B. eine Liste der Dateien, die tatsächlich gesendet wurden. Wenn sich nichts ändert, ist das einfach./
.