我有一个命令:
...
{
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/