Ho uno script che utilizza rsync per sincronizzare i dati in uno scenario remoto -> locale. Immediatamente dopo l'esecuzione del comando rsync, un controllo per vedere se il codice di errore è uguale a zero o meno. Se è zero, vengono eseguiti ulteriori comandi. Ciò tuttavia non tiene conto del fatto che rsync potrebbe essere stato eseguito correttamente ma in realtà non ha apportato modifiche. Per questo motivo la condizione zero uguale verrà eseguita indipendentemente, il che è un po 'ridondante.
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
Quale sarebbe l'approccio migliore per espanderlo per verificare se c'erano effettivamente delle modifiche basate sul comando rsync eseguito. Ho letto che -i flag può fornire output a stdout, ma come può essere inserito in un blocco condizionale?
a=$("rsync command")
. Ciò eseguire il rsync
comando e il negozio stdout
in a
. Quindi puoi eseguire i test sua
| grep /
o qualcosa del genere, quindi controllare lo stato di uscita di grep con $?
, dovrebbe essere 1 se non ci fosse output.
-v
, quindi sta già fornendo le informazioni necessarie per stdout ... ad esempio, un elenco di file che sono stati effettivamente inviati. Se nulla è cambiato, è giusto./
.