24

我想这样做:

if [[ git status &> /dev/null ]]; then
   echo "is a git repo";
else
   echo "is not a git repo";
fi

除了我不知道如何检查退出状态。我该如何解决?

谢谢

4

3 回答 3

28

该变量$?包含最后的命令返回码

编辑:精确的例子:

git status &> /dev/null
if [ $? -eq 0 ]; then
  echo "git status exited successfully"
else
  echo "git status exited with error code"
fi
于 2010-02-01T22:03:55.067 回答
24

就这么简单

if git status &> /dev/null
then
   echo "is a git repo";
else
   echo "is not a git repo";
fi

或者以更紧凑的形式:

git status &> /dev/null && echo "is a git repo" || echo "is not a git repo"
于 2010-02-01T22:07:17.707 回答
1

我经常使用的另一种形式如下:

git status &> /dev/null
if (( $? )) then
    desired behavior for nonzero exit status
else
    desired behavior for zero exit status
fi

这比接受的答案稍微紧凑,但它不需要您将命令放在与 gregseth 的答案相同的行上(这有时是您想要的,但有时会变得难以阅读)。

双括号用于 zsh 中的数学表达式。(例如,请参见此处。)

编辑:请注意,(( expression ))语法遵循大多数编程语言的通常约定,即非零表达式计算为真,零计算为假。其他替代方案([ expression ][[ expression ]]if expressiontest expression等)遵循通常的 shell 约定,即 0(无错误)评估为真,非零值(错误)评估为假。因此,如果您使用此答案,则需要将ifandelse子句从其他答案中切换。

于 2017-04-18T20:25:50.870 回答