0

我目前正在使用 Git 的pre-push钩子来运行 PHP CS Fixer,但我正在寻找一种更不那么笨重的方法。我不知道如何传递 GNU Make 命令的脚本退出代码并传递给 Git 挂钩脚本。

文件设置

pre-push

#!/bin/bash
output=$(make run-cs-fixer)
exitCode="${output##*$'\n'}" # Gets last line printed from cs-fixer.sh
# Use exitCode to continue or halt push
# Exit code from cs-fixer.sh cannot be obtained here. Make seems to produce its own exit code.

Makefile

run-cs-fixer:
    @-cd docker-compose exec -T workspace bash ./cs-fixer.sh
    # echo $? gives me the exit code from cs-fixer.sh, but it's not available outside of this area, even if exited with it.

cs-fixer.sh

#!/bin/bash
./vendor/bin/php-cs-fixer fix...
exitCode=$?
echo $exitCode # This is the exit code I need

因此,它会:git push...> pre-push> Makefile>cs-fixer生成需要在pre-push.

如您所见,我从 手动打印退出代码,以便在使用cs-fixer.sh捕获该脚本的整个输出时可以提取它。我只是不知道如何自然地传递现有代码。pre-pushoutput=$(make run-cs-fixer)

似乎 Make 启动了一个新的 shell 来运行它的命令,所以这似乎是问题之一,但无法开始.ONESHELL工作。我能够确认我可以使用 Make 命令指令(如下run-cs-fixer:)回显所需的退出代码,但在pre-push.

4

1 回答 1

0

GNUmake根据手册页返回其工作状态。您不能更改的退出状态make(除了根据手册页强制使用 0、1 或 2)。
要执行您想要的操作,您需要捕获 make 命令的输出,例如通过echo 0orecho $$?并将该输出用作您要查找的值。

于 2021-10-28T22:27:34.503 回答