Mam skrypt, który używa rsync do synchronizacji danych w zdalnym -> scenariuszu lokalnym. Natychmiast po uruchomieniu komendy rsync sprawdź, czy kod błędu jest równy zero, czy nie. Jeśli jest zero, wykonywane są dalsze polecenia. Nie bierze to jednak pod uwagę faktu, że rsync mógł działać poprawnie, ale nie wprowadził żadnych zmian. Z tego powodu warunek równego zeru będzie działał niezależnie, co jest nieco zbędne.
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
Jakie byłoby najlepsze podejście do rozszerzenia tego, aby sprawdzić, czy rzeczywiście były jakieś zmiany na podstawie uruchomionego polecenia rsync. Czytałem, że flaga -i może dostarczyć wyjście na standardowe wyjście, ale jak można to umieścić w bloku warunkowym?
a=$("rsync command")
. Spowoduje to wykonanie rsync
polecenia i zapisanie stdout
w a
. Następnie możesz uruchomić testya
| grep /
coś lub coś takiego, a następnie sprawdzić status wyjścia grep za pomocą $?
, powinien wynosić 1, jeśli nie było wyjścia.
-v
tam, więc już dostarcza informacji, których potrzebujesz, aby stdout ... np. Listy plików, które zostały faktycznie wysłane. Jeśli nic się nie zmienia, to po prostu./
.