2011-06-02 143 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及更高版本。