如何从ssh任务中捕获返回值

时间:2011-06-02 13:48:44

标签: linux ant macros ssh

我在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创建它。

这可能吗?

2 个答案:

答案 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)

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

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

退出代码将在此之后位于名为exitCode的属性中。

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