Ant @ 变量未解析
Ant @ variable not resolved
这是我的 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}
变量没有被解释,因为双 @@ 字符。如果我把 space 放在它们之间
<echo message="${rsync.ssh.user}@ @{rsync.destination.host}:${rsync.destination.base.dir}/"/>
然后变量按预期解析。
compile:
[echo] root@ server1:/tmp/
[echo] root@ server2:/tmp/
BUILD SUCCESSFUL
Total time: 0 seconds
因为在用户名和服务器中有space,如果我们在这里执行ssh,它会通过异常。知道如何解决这个问题。
(core)ant中没有变量,只有properties和attributes。
@{foo} 是访问 macrodef 中 macrodef 属性值的语法。作为 antcontrib for task uses ant macrodef task 在引擎盖下它具有相同的语法。
试试 :
...
<echo message="${rsync.ssh.user}@@@{rsync.destination.host}:${rsync.destination.base.dir}/"/>
...
表示使用 3x @ 而不是 2x @
参数 @{rsync.destination.host}
必须用第二个 @ 屏蔽,所以实际上你需要使用 @ 3 次。
您可以将字面上的 at 符号放在 属性:
<property name="at" value="@"/>
<echo message="${rsync.ssh.user}${at}@{rsync.destination.host}:${rsync.destination.base.dir}/"/>
这是我的 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}
变量没有被解释,因为双 @@ 字符。如果我把 space 放在它们之间
<echo message="${rsync.ssh.user}@ @{rsync.destination.host}:${rsync.destination.base.dir}/"/>
然后变量按预期解析。
compile:
[echo] root@ server1:/tmp/
[echo] root@ server2:/tmp/
BUILD SUCCESSFUL
Total time: 0 seconds
因为在用户名和服务器中有space,如果我们在这里执行ssh,它会通过异常。知道如何解决这个问题。
(core)ant中没有变量,只有properties和attributes。
@{foo} 是访问 macrodef 中 macrodef 属性值的语法。作为 antcontrib for task uses ant macrodef task 在引擎盖下它具有相同的语法。
试试 :
...
<echo message="${rsync.ssh.user}@@@{rsync.destination.host}:${rsync.destination.base.dir}/"/>
...
表示使用 3x @ 而不是 2x @
参数 @{rsync.destination.host}
必须用第二个 @ 屏蔽,所以实际上你需要使用 @ 3 次。
您可以将字面上的 at 符号放在 属性:
<property name="at" value="@"/>
<echo message="${rsync.ssh.user}${at}@{rsync.destination.host}:${rsync.destination.base.dir}/"/>