2012-12-07 208 views
0

我已经接触到BASH脚本0,这是我很想学习的东西。我无法弄清楚如何在Android版本上运行基于ant debug输出的条件语句。Android蚂蚁和bash脚本

我想基本上是这样说

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

我怎样才能确定是否ant debug已过,或者在shell脚本失败了吗?

SOLUTION

好这里是我有:

ant clean 

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

回答

1

我会给出一个简要总结为您服务。

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

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

if true; 
    echo "It is true" 
fi 

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

下面是一个例子:

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

如果蚂蚁的确好好孝敬退出代码系统,然后像下面应该是可能的:

if ant debug; then 
    echo success 
else 
    echo failure 
fi 
+0

谢谢 - 我知道0和1的退出代码,但不是$ ?.让我玩,看看我能得到什么。我会告诉你。 – jjNford

0

我什么都不知道蚂蚁调试,但有两种方法可以在Bash中做你想做的事情。首先是测试输出,就像你所示:

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

可以使用反引号,而不是像$(.....)你在你的问题中写道让你的shell脚本移植到对Bourne shell的其他变体,但开始如果您的命令后来涉及嵌套引号,则会变得麻烦。

第二种方法更稳健一些,就是测试退出值而不是它们的输出。这取决于Ant(或其他)具有已记录且稳定的退出代码,但这意味着如果命令的输出发生更改,您的脚本将继续工作。例如,POSIX标准说,如果一个项目在做什么它应该做的成功,它应该退出()与零值:

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中确实结束了,如果阻滞“网络连接”。 :-)

0

快速man ant显示ant debug调用Ant与调试任务。Ant的任务有点用户定义的XML脚本,默认情况下Ant在当前目录中搜索build.xml文件。您可以使用android工具生成该文件,但模板保存在android-sdk/tools/ant中,您可以使用view it online(第1005行定义debug目标)。

所以ant debug不是一个真正的命令,不应该放在脚本工具链中。然而,如果你发现你的输出稳定并且感觉很勇敢,你总是可以比较字符串。这是definitve guide

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