8

我想在 bash 脚本中运行命令 mvn clean。但我想把它放在一个 if 语句中。如果清理无法正常运行,我想使用 echo 语句退出 bash 脚本。这是导致问题的代码: if [ mvn clean ]; 然后

我尝试将 $(mvn clean) 放在 if 语句中,但终端说参数太多。有谁知道这是否可能?谢谢!

4

3 回答 3

24

这就是你想要的:

mvn clean
if [ "$?" -ne 0 ]; then
    echo "Maven Clean Unsuccessful!"
    exit 1
fi

解释:

  • $?是一个特殊的 shell 变量,包含最近执行的命令的退出代码(无论它是否成功终止)。
  • -netest 内置 [选项。它代表“不相等”。所以在这里我们正在测试退出代码mvn clean是否不等于零。
  • echo "Maven Clean Unsucccessful!"- 如果是这种情况,那么我们会输出一些指示性消息,并使用错误的退出代码退出脚本本身。

当你这样做时$(mvn clean),它会生成一个新的子 shell 来运行,然后简单地将输出到该子 shell 中的mvn clean所有内容从 running 转储到父shell 中使用的位置。stdoutmvn clean$(...)


或者,您可以这样做:

mvn clean || { echo "Maven Clean Unsuccessful"; exit 1; }

这只是做同样事情的速记语法糖。

于 2012-11-30T19:27:51.890 回答
7

检查退出状态不需要括号:

if mvn clean ; then
   echo ok
else
   echo Something went wrong.
   exit 1
fi
于 2012-11-30T19:28:13.223 回答
0

我更喜欢使用变量来捕获返回码。提高可读性并允许运行其他命令而不必担心破坏返回码值:

mvn clean

MVN_RTN=$?
if [ "${MVN_RTN}" -ne 0 ]; then
   echo "Maven returned failure code ${MVN_RTN}"
   exit 1
fi
于 2018-04-29T17:57:52.073 回答