You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:54:04