У мене є сценарій, який використовує rsync для синхронізації даних у віддаленому -> локальному сценарії. Відразу після запуску команди rsync слід перевірити, чи дорівнює код помилки нулю чи ні. Якщо його нуль, виконуються подальші команди. Це, однак, не враховує той факт, що rsync, можливо, працював успішно, але фактично не вносив жодних змін. Через це умова рівне нулю буде працювати незалежно, що трохи зайве.
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
Який найкращий підхід розширити це, щоб перевірити, чи були насправді якісь зміни на основі запущеної команди rsync. Я читав, що прапор -i може забезпечити вихід для stdout, але як це можна помістити в умовний блок?
a=$("rsync command")
. Це виконає rsync
команду і збережеться stdout
в a
. Тоді ви можете запустити тести наa
| grep /
або щось подібне, а потім перевірити стан виходу grep з $?
, він повинен бути 1, якщо не було виводу.
-v
туди, тому він вже надає інформацію, яку потрібно викреслити ... наприклад, список файлів, які були фактично надіслані. Якщо нічого не зміниться, це просто./
.