Android ant and bash scripting



我接触过 BASH 脚本的次数为 0,这是我很想学习的东西。我不知道如何在 Android 构建上基于 ant debug 的输出运行条件语句。

我想基本上说这样的话

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

如何确定 shell 脚本中的ant debug是通过还是失败?

溶液

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

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

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

在 Bash 中,条件基于程序的退出代码。退出代码 0 被接受为 true,而其他所有代码则被接受为 false。

例如,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

我对 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 块。 :-)

快速man ant显示ant debug使用调试任务调用 Ant。Ant 的任务类似于用户定义的 XML 脚本,默认情况下,Ant 会在当前目录中搜索build.xml文件。您可以使用 android 工具生成文件,但是模板保留在android-sdk/tools/ant中,您可以在线查看(第 1005 行定义了debug目标)。

因此,ant debug并不是真正的命令,也不应放在脚本工具链中。但是,如果您发现输出稳定并且感觉很勇敢,您可以随时比较字符串。这是权威指南。

if [ `ant debug` = $SOMETHING ]; then
  echo Success
else
  echo Failure
fi

最新更新