Bash脚本如何将命令返回的137退出码替换为0以适配CI流水线要求
Bash中将137退出码映射为0的实现方案
方案1:单命令单独处理(逻辑清晰,推荐优先使用)
直接捕获目标命令的退出码做分支判断即可,适合仅需要处理单个工具返回码的场景:
# 替换为你实际要运行的工具命令 your_target_tool exit_code=$? # 137按成功处理,其余返回码保持原有逻辑 if [ ${exit_code} -eq 137 ]; then exit 0 else exit ${exit_code} fi
方案2:全局自动处理(基于trap实现,适合多命令场景)
你之前对trap的认知存在偏差,trap支持绑定自定义逻辑处理退出事件,完全可以实现自定义退出码替换,适合脚本内多处需要运行目标工具、不想逐个加判断的场景,只需要在脚本开头添加如下逻辑即可:
# 绑定EXIT信号的处理逻辑,全局生效 trap 'curr_exit_code=$?; if [ ${curr_exit_code} -eq 137 ]; then exit 0; else exit ${curr_exit_code}; fi' EXIT # 后续正常写你的脚本逻辑即可,任何原因触发脚本退出时都会自动走上面的判断 your_target_tool_1 your_target_tool_2
方案3:单行简化写法
如果需要在CI步骤或单行命令中直接使用,可以用短路逻辑快速实现:
your_target_tool || [ $? -eq 137 ]
上述逻辑的生效规则:工具返回0时直接返回0,工具返回非0时判断是否为137,是则整条语句返回0,否则返回原退出码。
注意:退出码137默认对应进程被SIGKILL信号终止,通常为系统内存不足强制杀掉进程导致,建议确认你的业务场景下该返回码确实属于可接受的成功状态后再使用上述逻辑,避免遗漏真实的运行故障
内容的提问来源于stack exchange,提问作者Alon Tsaraf
相关产品推荐
相关产品推荐

