4

请看一下这一行:

${server_username}:${server_password}@@{server}:/tmp

双 @@ 会导致问题。它显示为 user:passserver 而不是 user:pass@server,因此无法连接到远程 ssh 服务器。

你如何告诉蚂蚁离开@ be?

这是我的代码:

<for list="${externalLibs}" param="library"> 
  <sequential>
    <for list="${servers}" param="server"> 
      <sequential>
        <echo> Copying @{library} to @{server} ${server_username}:${server_password}@@@{server}:/tmp/@{library}/${@{library}}/ 
        </echo>
        <scp todir="${server_username}:${server_password}@@@{server}:/tmp/@{library}/${@{library}}/">     
          <fileset dir="/tmp/@{library}/${@{library}}/" /> 
        </scp>
      </sequential> 
    </for>
  </sequential> 
</for>

在 echo 命令中,它显示如下:

将 LibraryName 复制到 myserver.domain.com 用户名:password@{server}:/tmp/LibraryName/LibraryBar

4

2 回答 2

3

您可以通过将其翻倍来逃脱@,如@@.

所以在你的情况下,它将是:

${server_username}:${server_password}@@@{server}:/tmp

顺便说一句,同样的规则也适用于$逃生,$$只是打印一个$.

回复OP的评论

例子:

<property name="server_username" value="user-name"/>
<property name="server_password" value="passwd"/>

<for list="s1.foo.bar,s2.foo.bar,s3.foo.bar" param="server">
  <sequential>
    <echo message="${server_username}:${server_password}@@@{server}:/tmp"/>
  </sequential>
</ac>

这会产生:

 [echo] user-name:passwd@s1.foo.bar:/tmp
 [echo] user-name:passwd@s2.foo.bar:/tmp
 [echo] user-name:passwd@s3.foo.bar:/tmp

所以,你的问题出在其他地方,可能在循环设置代码中

于 2010-07-19T13:35:50.383 回答
1

似乎该行中的错字-倒数第二个@应更改为$${server_username}:${server_password}@${server}:/tmp

于 2010-07-19T12:28:04.170 回答