如何区分git grep未检出违禁词与命令执行错误并调整退出状态
改进Git违禁字符串检查脚本
先明确git grep的退出码规则:
- 0:成功找到匹配的字符串
- 1:未找到任何匹配
- ≥2:命令执行出错(比如参数错误、不在Git仓库内等)
根据你的需求,我们可以通过捕获命令的退出码来区分这三种情况,确保只有确认无违禁词时返回唯一状态码,检出违禁词或执行出错时返回相同状态。改进后的脚本如下:
#!/bin/bash # 执行git grep并保存退出码 git grep --full-name --extended-regexp --line-number 'bad|words' exit_code=$? # 根据退出码分支处理 if [ $exit_code -eq 0 ]; then echo "检测到违禁词" exit 1 # 检出违禁词时返回非0状态 elif [ $exit_code -eq 1 ]; then echo "未检测到违禁词" exit 0 # 仅这里返回唯一的确认无违禁词状态码 else echo "git grep执行出错,无法确认是否存在违禁词" >&2 exit 1 # 执行错误时和检出违禁词返回相同状态 fi
关键说明:
- 先执行
git grep并通过exit_code=$?捕获退出码,避免原脚本直接用if判断时,把"未找到匹配"和"命令执行错误"两种非0情况混为一谈的问题 - 明确区分三种状态:
- 退出码0:找到违禁词,输出提示后返回1
- 退出码1:确认无违禁词,返回0(这是唯一的确认状态)
- 退出码≥2:执行出错,把错误提示输出到标准错误流(
>&2),然后返回1,和检出违禁词的状态一致
- 外部调用脚本时,可通过返回码快速判断:
- 返回0:确定无违禁词
- 返回1:要么有违禁词,要么脚本执行出错,需要进一步排查
内容的提问来源于stack exchange,提问作者user3310334
相关产品推荐
相关产品推荐

