4

この行を見てください:

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

二重 @@ は問題を引き起こします。user:pass@server の代わりに user:passserver として表示されるため、リモート ssh サーバーに接続できません。

ant に @ 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 username:password@{server}:/tmp/LibraryName/LibraryBar にコピーしています

4

2 に答える 2

3

@のように 2 倍にして脱出し@@ます。

したがって、あなたの場合は次のようになります。

${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

その行のタイプミスのようです-最後から2番目を次の@ように変更する必要があります$: ${server_username}:${server_password}@${server}:/tmp

于 2010-07-19T12:28:04.170 に答える