0

我对 BASH 脚本的接触为 0,这是我很想学习的东西。我不知道如何根据ant debugAndroid 构建的输出运行条件语句。

我想说的是

if(`ant debug` == SUCCESS) {
  // EXECUTE THESE COMMANDS
} else {
  // EXECUTE THESE COMMANDS
}

如何确定ant debugshell 脚本中是否已通过或失败?

解决方案

好的,这就是我所拥有的:

ant clean

if ant debug; then
    echo "success"
else
    echo "failure"
fi
4

3 回答 3

1

我会给你一个快速的总结。

在 Bash 中,条件基于程序的退出代码。的退出代码0被接受为真,而其他一切都被接受为假。

例如,true程序总是以退出代码 退出0,这意味着可能出现这样的情况:

if true;
  echo "It is true"
fi

大多数命令都尊重这个系统,但不是每个程序都这样做。首先要检查的是 ant 在成功和失败时返回的退出代码。您可以使用 . 检查上一个命令的退出代码$?

这是一个例子:

$ true
$ echo $?
0
$ false
$ echo $?
1

如果 ant 确实正确地遵守了退出代码系统,那么应该可以执行以下操作:

if ant debug; then
  echo success
else
  echo failure
fi
于 2012-12-07T18:46:48.040 回答
0

使用调试任务调用 Ant的快速man ant演示。Ant 的任务有点像用户定义的XML 脚本,默认情况下,Ant在当前目录中搜索文件。您可以使用 android 工具生成文件,但是会保留一个模板,您可以在线查看它(第 1005 行定义了目标)。ant debugbuild.xmlandroid-sdk/tools/antdebug

所以ant debug不是真正的命令,也不应该放在脚本工具链中。但是,如果您发现自己的输出稳定并感到勇敢,则始终可以比较字符串。这是权威指南

if [ `ant debug` = $SOMETHING ]; then
  echo Success
else
  echo Failure
fi
于 2012-12-07T19:07:22.447 回答
0

我对 Ant 调试一无所知,但是有两种方法可以在 Bash 中做你想做的事情。第一个是像你展示的那样测试输出:

if test $(ant debug) == 'SUCCESS'; then
    # do stuff
else
    # do other stuff
fi

$(.....)您可以通过使用反引号而不是像您在问题中写的那样使您的 shell 脚本可移植到 Bourne shell 上的其他变体,但是如果您的命令稍后涉及嵌套引号,这就会变得很麻烦。

第二种方法更健壮一点,是测试命令的退出值而不是它们的输出。这取决于 Ant(或其他)具有已记录且稳定的退出代码,但这意味着如果命令的输出发生更改,您的脚本将继续工作。例如,POSIX 标准规定,如果一个程序成功地完成了它应该做的任何事情,它应该以零值 exit():

ant debug > /dev/null
ant_exit_code=$?
# other commands can safely go here now that $? is captured

if test $ant_exit_code -eq 0; then
    # do stuff
else
    # do other stuff
fi

是的,Bourne shell 确实以“fi”结束了 if 块。:-)

于 2012-12-07T18:52:17.123 回答