2011-06-02 142 views
1

我在ANT中定义的宏来检查,如果在远程Linux机器存在DIR赶上返回值:如何从一个SSH任务蚂蚁

<macrodef name="checkIfDirExists"> 
    <attribute name="host" /> 
    <attribute name="username" /> 
    <attribute name="password" /> 
    <attribute name="dir" /> 
    <sequential> 
     <runcommand executable="[ -d @{dir} ]" host="@{host}" username="@{username}" password="@{password}"/> 
    </sequential> 
</macrodef> 

runcommand只是为sshexec任务的包装宏验证了一些额外的东西,但基本上它只是一个sshexec

现在,如果我运行它,它工作的方式,如果该目录中存在的构建下去,但如果它不存在,因为[ -d @{dir} ]返回值是1。

我想构建失败能够检查返回值,因此我可以将它放在conditional标记中,例如,如果目录存在,跳过,并且它没有使用mkdir创建它。

这可能吗?

回答

2

这是在黑暗中总刺,我不知道蚂蚁会不会让你这样做。但是如果它在远程主机上调用bash,它应该应该工作。

<macrodef name="checkIfDirExists"> 
    <attribute name="host" /> 
    <attribute name="username" /> 
    <attribute name="password" /> 
    <attribute name="dir" /> 
    <sequential> 
     <runcommand executable="[ -d @{dir} ] || mkdir @{dir}" host="@{host}" username="@{username}" password="@{password}"/> 
    </sequential> 
</macrodef> 

这样,如果目录存在,它会短路并返回成功。如果它不存在,它会调用mkdir。如果mkdir失败,那么ant将失败。

+0

工作像一个魅力。谢谢 ! – Michael 2011-06-02 14:08:34

0

要获取命令的退出代码,使用的resultpropertyfailonerror组合:

<sshexec command="[ -d @{dir} ]" ... failonerror="false" resultproperty="exitCode"/> 

退出代码将在一个名为此后exitCode财产。

参见Ant sshexec docs。适用于Ant 1.9.4及更高版本。