2012-12-28 38 views
1

我在sshexec任務中遇到變量問題。 我的build.xml Ant腳本的樣子:螞蟻在sshexec中的bash腳本中的變量

<?xml version="1.0" encoding="UTF-8"?> 
<project name="sshexecproject" basedir="." default="build"> 
<target name="build"> 
    <sshexec 
     host="192.168.2.106" 
     username="root" 
     password="xxx" 
     commandResource="${basedir}/to_run.sh" 
     trust="true" 
     verbose="true" 
     failonerror="true" 
    /> 
</target> 

在to_run腳本我有兩個變量:

#!/bin/bash 

name="Pink Panther" 
export name2="Panther Pink" 

echo "Name: " 
echo $name 
echo "Name with export: " 
echo $name2 

如果我在終端,我得到下面的輸出運行腳本:

$ ./to_run.sh 
Name: 
Pink Panther 
Name with export: 
Panther Pink 

我們可以看到,一切正常。但是,如果我從螞蟻開始build.xml腳本我得到下面的輸出:

... 
[sshexec] Authentication succeeded (password). 
[sshexec] cmd : #!/bin/bash 
[sshexec] cmd : 
[sshexec] cmd : name="Pink Panther" 
[sshexec] cmd : export name2="Panther Pink" 
[sshexec] cmd : 
[sshexec] cmd : echo "Name: " 
[sshexec] Name: 
[sshexec] cmd : echo $name 
[sshexec] 
[sshexec] cmd : echo "Name with export: " 
[sshexec] Name with export: 
[sshexec] cmd : echo $name2 
[sshexec] 
[sshexec] Disconnecting from ... 

我們可以看到,在遠程服務器上運行此腳本創建一個空的回聲。變量名稱和名稱2未填充。爲什麼?

回答

3

更改該行:

commandResource="${basedir}/to_run.sh" 

command="${basedir}/to_run.sh" 

結果如下:

[sshexec] Authentication succeeded (password). 
[sshexec] cmd : /data/tmp/anttest/to_run.sh 
[sshexec] Name: 
[sshexec] Pink Panther 
[sshexec] Name with export: 
[sshexec] Panther Pink 

commandResource需要一個資源文件,命令的列表,並分別執行每行與bash -c $LINE所以任何定義的變量只是有效的在同一行上。 command在同一個shell中執行整個腳本。

+0

感謝您的回覆,我更新了我的問題,因爲問題仍未解決。 – user1791139

+0

經過進一步的研究,'commandResource'是一個命令文件,其中的每一行執行爲'bash -c $ LINE',因此每個命令都有一個單獨的shell和上下文。你想要的是'command',它將一次執行整個腳本。 –

+0

如果我將commandResource更改爲命令,我收到文件未找到錯誤。腳本必須先在服務器上使用才能使用它? – user1791139