2010-07-19 4 views
4

S'il vous plaît jeter un oeil à cette ligne:@ dans une boucle en utilisant scp

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

Le double @@ cause des problèmes. Au lieu de user: pass @ server, il s'affiche en tant qu'utilisateur: passserver et ne peut donc pas se connecter au serveur ssh distant.

Comment dites-vous à la fourmi de quitter le @ be?

Ceci est mon code:

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

Dans la commande echo, il montre comme ceci:

copie LibraryName à myserver.domain.com nom d'utilisateur: mot de passe @ {serveur}:/tmp/LibraryName/LibraryBar

+0

Provoque des problèmes pour quoi? Qui? Comment? – skaffman

+0

Édité pour Skaffman. –

+0

Souhait je savais que je devais faire mieux mise en forme :-( –

Répondre

3

Vous échapper @ en le doublant, comme dans @@.

Donc, dans votre cas, il sera:

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

BTW, même règle vaut pour $ évasion, $$ juste imprime un $.

En réponse au commentaire de l'OP

Exemple:

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

Ce produit:

[echo] user-name:[email protected]:/tmp 
[echo] user-name:[email protected]:/tmp 
[echo] user-name:[email protected]:/tmp 

Donc, votre problème est ailleurs, probablement dans le code de configuration de boucle

+0

Salut Alexander, il n » t semble fonctionner pour moi :-(Il suffit d'echo's out @ {server} –

+0

@Steve.Postez toute la configuration de la boucle, parce que l'exemple ici fonctionne. –

1

Il semble que ce soit une faute de frappe dans cette ligne - la dernière en dernier @ sh ould être changé à $: ${server_username}:${server_password}@${server}:/tmp

+0

Aussi, je suppose que vous utilisez la tâche Ant SCP –

+0

Désolé Zloi, oublié de mentionner que la commande est incluse dans une boucle For. –

+0

Ensuite, vous devez utiliser triple @ comme recommandes par Alexander Pogrebnyak –

Questions connexes