当前位置: 首页 > 知识库问答 >
问题:

Bash:如何捕捉git命令失败?

越雨泽
2023-03-14

我有一个命令:

...
{
    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.
[

有办法捕获该错误吗?即使它只匹配警告,我也不介意:打印出来的Ref'refs/head/master'没有改变字符串(我想顺便隐藏)

共有1个答案

华知
2023-03-14

无论发生什么,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

 类似资料:
  • 基础常用命令 某个命令 --h,对这个命令进行解释 某个命令 --help,解释这个命令(更详细) man某个命令,文档式解释这个命令(更更详细)(执行该命令后,还可以按/+关键字进行查询结果的搜索) Ctrl + c,结束命令 TAB键,自动补全命令(按一次自动补全,连续按两次,提示所有以输入开头字母的所有命令) 键盘上下键,输入临近的历史命令 history,查看所有的历史命令 Ctrl +

  • 在节点中。在js服务器上,捕获SIGTERM和捕获SIGINT有什么区别吗? 我认为进程不应该能够防止SIGINT关闭? 我是否能够捕获两个信号并阻止退出?我的实验表明答案是肯定的,但从我所读到的内容来看,SIGINT总是假设关闭一个进程。 或者我把SIGINT和SIGKILL混淆了?也许SIGKILL是我无法恢复的信号? 捕捉这些信号当然可以让我优雅地关机: 我想我把SIGINT和SIGKILL

  • 问题内容: 我有一个很大的数学表达式,必须动态创建。例如,一旦我已经解析了“东西”,结果就会像一个字符串:。 因此,为了计算该表达式的结果,我使用的是函数…… 这里的问题是,有时我会收到错误消息,说被零除,并且我不知道如何捕获该异常。我已经尝试过类似的事情: 要么: 但这行不通。因此,如何避免被零除的应用程序崩溃? 编辑: 首先,我想澄清一下:表达式是动态构建的,因此如果分母为零,我不能仅仅求值。

  • 无法从Git bash运行以下命令。我在错误以下; Git版本:Git版本2.28.0.Windows.1操作系统:Windows10

  • 我想捕获并忽略以下tomcat。因为我的程序没有必要注意这个。 知道如何以及在哪里可以捕捉到这个异常吗?以下是例外情况:

  • 问题内容: 在Java中是否有捕捉到内存不足错误()的问题? 问题答案: 是的 。以下是一些可能有意义的示例: 如果您想通过 优雅地关闭 程序来处理它 如果要向用户显示问题或 记录错误 根据您的设计,您甚至可以清理内存并 恢复工作状态 但是 ,请注意,通常情况下(除非您处在一次要分配大量内存的位置),对于这些情况,您可能不会专门捕获OutOfMemoryError,而是始终在顶部进行操作主要入口点