来自ant的sshexec中的bash脚本中的变量

时间:2012-12-28 00:44:50

标签: ant

我在sshexec任务中遇到变量问题。 我的build.xml ant脚本如下所示:

<?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

我们可以看到一切正常。但是如果我从ant启动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未填充。为什么呢?

1 个答案:

答案 0 :(得分: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中执行整个脚本。