我有一个脚本,该脚本使用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提供输出,但是如何将其放在条件块中呢?
根据对我的原始问题的评论,使用-i标志将rsync输出输出到stdout,并使用非字符串检查条件来查看错误代码检查中是否有任何实际更改。将rsync命令包装在变量中可以完成检查。
RSYNC_COMMAND=$(rsync -aEim --delete /path/to/remote/ /path/to/local/)
if [ $? -eq 0 ]; then
# Success do some more work!
if [ -n "${RSYNC_COMMAND}" ]; then
# Stuff to run, because rsync has changes
else
# No changes were made by rsync
fi
else
# Something went wrong!
exit 1
fi
潜在的缺点是,您必须丢失详细的输出,但始终可以将其记录到文件中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句