git - Bash:如何捕获 git 命令失败?

标签 git bash

我有一个命令:

...
{
    git filter-branch -f --env-filter "$ENVFILTER" >/dev/null
    echo "Git updated. Run 'git push -f BRANCH_NAME' to push your changes."
} || {
    echo "Git failed. Please make sure you run this on a clean working directory." // this doesn't ever get called
}

快乐路径有效,但它看起来不像 || 曾经被执行过。这是失败的样子:

[~/Documents/my-repo]$ my-custom-command                                                                           
WARNING: Ref 'refs/heads/master' is unchanged
Git updated. Run 'git push -f BRANCH_NAME' to push your changes.
[

有没有办法捕获该错误?我不介意,即使它只是匹配 WARNING: Ref 'refs/heads/master' is unchanged string that gets printed out (我想顺便 stash 一下)

最佳答案

git 之后的echo 命令无论如何都会被执行,这是第一个问题。 第二个问题是这个 echo 命令更新错误代码:第一个错误代码被覆盖。

我建议采用“经典”方法(可能有点过时,我是用 ksh 长大的):

git filter-branch -f --env-filter "$ENVFILTER" >/dev/null
if [ $? = 0 ] ; then
    echo "Git updated. Run 'git push -f BRANCH_NAME' to push your changes."
else
    echo "Git failed. Please make sure you run this on a clean working directory."
fi

稍微偏离主题:MS-DOS/Windows 用户会对此感到惊讶,因为在 Windows 中,echo 不会更改 ERRORLEVEL

关于git - Bash:如何捕获 git 命令失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40094531/

相关文章:

ios终端github端口443。操作超时

带有索引过滤器的 Git 过滤器分支不起作用并按预期删除目录

GitHub - 指定时间的存储库状态

bash - 刷新前 N 行并将光标重置到带有转义序列的当前行的末尾?

bash - 'printf -v' 是做什么的?

Git 展平子模块

Github Desktop - 不显示更改

linux - 如何使用 sed 替换退格字符 (\b)?

bash - Shell 脚本将 PID 作为输入,获取与每个 PID 关联的线程并将其写入文件。有人可以帮助或指导吗?

Bash Shell 脚本::实时发送 STD-OUT?