Cygwin中Bash脚本执行diff检测到差异后后续代码静默终止问题求助
Cygwin中Bash脚本执行diff检测到差异后后续代码静默终止问题求助
各位好,我在Cygwin的Bash脚本里遇到了一个头疼的问题,想请教下大家的思路。
我写了一个备份脚本,流程是先用rsync同步备份,再用diff对比源目录和备份目录的树结构差异。diff本身的差异检测是没问题的,结果和WinMerge查出来的完全一致,但只要diff检测到文件差异,脚本里diff那一行之后的所有代码就直接静默终止了,根本不执行,直接跳回Cygwin的命令提示符。
我的测试环境是这样的:测试目录包含23个文件夹、100个文件,总大小40MB,用这个目录和对应的备份目录就能稳定复现问题。而且我的Cygwin是完全更新到最新的——setup版本v2.932,diffutils版本v3.10-1,没有待安装的更新项。
下面是脚本里出问题的核心代码片段:
echo -e "Running diff...\r\n" diff -qr /cygdrive/d/Data/Tools/Scripts/ /cygdrive/e/Backups/Data/Tools/Scripts return_code=$? echo "Return code: ${return_code}"
我也做了无差异的测试:当用测试目录的子集(确保和备份目录完全一致)运行脚本时,整个流程是正常的,会正确输出返回码,比如:
Running diff...
Return code: 0
Admin@PC0 /cygdrive/d/Data/Tools/scripts/backups
$
但只要diff检测到任何差异,return_code=$?和后面的echo语句就完全不执行了,直接退出脚本回到命令行,连个错误提示都没有,这实在搞不懂哪里出问题了,有没有朋友遇到过类似的情况?
备注:内容来源于stack exchange,提问作者Ronzone
相关产品推荐
相关产品推荐

