我接触过 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