如何获取Makefile命令退出码并将其作为Git hook中的变量使用
问题根源
- Makefile中
run-cs-fixer的命令开头加了-前缀,该语法会让Make忽略命令执行的错误,无论实际命令返回什么退出码,Make都会默认返回0,导致外层pre-push无法拿到真实退出状态 - 原有
cd docker-compose exec属于语法错误,cd是本地目录切换指令,无法和docker-compose exec命令拼接使用
修复方案
1. 修改Makefile
run-cs-fixer: @docker-compose exec -T --workdir /你的容器内项目根目录 workspace bash ./cs-fixer.sh
说明:
- 去掉命令开头的
-前缀,让Make直接透传执行命令的退出码 - 删掉错误的
cd指令,如果需要指定容器内的工作目录,使用docker-compose exec的--workdir参数即可,路径替换为你实际的项目在容器内的根目录路径 - 不需要额外写echo退出码的逻辑,Make会自动将最后一条执行命令的退出码作为自身的退出码返回
2. 简化cs-fixer.sh
不需要额外打印退出码,直接透传即可:
#!/bin/bash ./vendor/bin/php-cs-fixer fix ... exit $?
3. 简化pre-push脚本
直接捕获Make的退出码即可,无需抓取输出截取最后一行:
#!/bin/bash make run-cs-fixer exitCode=$? # 非0退出码代表代码规范检查不通过,终止推送 if [ ${exitCode} -ne 0 ]; then echo "PHP代码规范检查不通过,推送已终止" exit ${exitCode} fi exit 0
内容的提问来源于stack exchange,提问作者laketuna
相关产品推荐
相关产品推荐

