Ant @变量未解析



这是我的build.xml代码片段

<target name="compile">
  <for param="rsync.destination.host" list="${file}" delimiter="${line.separator}">
    <sequential>
    <echo message="${rsync.ssh.user}@@{rsync.destination.host}:${rsync.destination.base.dir}/"/>
    </sequential>
  </for>
</target>

我收到以下输出,

compile:
     [echo] root@{rsync.destination.host}:/tmp/
     [echo] root@{rsync.destination.host}:/tmp/
BUILD SUCCESSFUL
Total time: 0 seconds

所以这里的@{rsync.destination.host}变量没有被解释,因为有两个@@字符。如果我在它们之间加空格

    <echo message="${rsync.ssh.user}@ @{rsync.destination.host}:${rsync.destination.base.dir}/"/>

then变量按预期解析。

compile:
     [echo] root@ server1:/tmp/
     [echo] root@ server2:/tmp/
BUILD SUCCESSFUL
Total time: 0 seconds

由于用户名和服务器中有空间,如果我们在这里执行ssh,将会出现异常。你知道怎么解决这个问题吗?

(core) ant中没有变量,只有属性和属性。@{foo}是在macrodef中访问macrodef属性值的语法。因为antcontrib for task在底层使用了ant macrodef task,所以它具有相同的语法。

...
<echo message="${rsync.ssh.user}@@@{rsync.destination.host}:${rsync.destination.base.dir}/"/>
...

表示使用3x @代替2x @
参数@{rsync.destination.host}必须用第二个@遮罩,所以实际上你需要使用@ 3次。

可以在属性中使用@符号:

<property name="at" value="@"/>
<echo message="${rsync.ssh.user}${at}@{rsync.destination.host}:${rsync.destination.base.dir}/"/>

相关内容

  • 没有找到相关文章

最新更新