我想在bash脚本中运行命令mvn clean。但我想把它放在if语句中。如果clean运行不正常,我想用echo语句退出bash脚本。 以下是导致问题的代码: 如果[mvn clean];然后
我尝试将$(mvn clean)放在if语句中,但是有太多的参数说终端。有谁知道这是否可能?谢谢!
答案 0 :(得分:21)
这是你想要的:
mvn clean
if [ "$?" -ne 0 ]; then
echo "Maven Clean Unsuccessful!"
exit 1
fi
<强>解释强>
$?
是special shell variable,其中包含最近立即执行的命令的退出代码(无论是否成功终止)。-ne
是test
builtin [
的选项。它代表“不平等”。所以我们在这里测试mvn clean
的退出代码是否不等于零。echo "Maven Clean Unsucccessful!"
- 如果是这种情况,那么我们输出一些指示性消息,并使用错误的退出代码退出脚本本身。当您执行$(mvn clean)
时,它会生成一个新的子shell以运行mvn clean
,然后只需将运行stdout
的子shell中输出的所有内容转储到mvn clean
其中$(...)
在父shell中使用。
或者,您可以这样做:
mvn clean || { echo "Maven Clean Unsuccessful"; exit 1; }
这只是做同样事情的简写语法糖。
答案 1 :(得分:7)
检查退出状态不需要括号:
if mvn clean ; then
echo ok
else
echo Something went wrong.
exit 1
fi
答案 2 :(得分:0)
我更喜欢使用变量来捕获返回码。提高了可读性并允许运行其他命令,而不必担心破坏返回代码值:
mvn clean
MVN_RTN=$?
if [ "${MVN_RTN}" -ne 0 ]; then
echo "Maven returned failure code ${MVN_RTN}"
exit 1
fi