我在ANT中定义了一个宏来检查远程linux盒子上是否存在目录:
<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创建它。
这可能吗?
答案 0 :(得分: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就会失败。
答案 1 :(得分:0)
要获取命令的退出代码,请使用resultproperty
和failonerror
的组合:
<sshexec command="[ -d @{dir} ]" ... failonerror="false" resultproperty="exitCode"/>
退出代码将在此之后位于名为exitCode
的属性中。
见Ant sshexec docs。适用于Ant 1.9.4及更高版本。