2010-07-23 8 views
60

Je veux être en mesure d'exécuter une commande de ma machine en utilisant ssh et passer à travers la variable d'environnement $BUILD_NUMBERpassage de variables dans la commande ssh à distance

Voici ce que je suis en train:

ssh [email protected] '~/tools/myScript.pl $BUILD_NUMBER' 

$BUILD_NUMBER est positionné sur la machine faisant l'appel ssh et puisque la variable n'existe pas sur l'hôte distant, elle n'est pas récupérée.

Comment puis-je transmettre la valeur $BUILD_NUMBER?

+1

sans rapport avec Hudson, retiré l'étiquette. (Hudson crée simplement la variable) –

Répondre

116

Si vous utilisez

ssh [email protected] "~/tools/run_pvt.pl $BUILD_NUMBER" 

au lieu de

ssh [email protected] '~/tools/run_pvt.pl $BUILD_NUMBER' 

votre shell interpolera la $BUILD_NUMBER avant d'envoyer la chaîne de commande à l'hôte distant.

+1

Si quelqu'un DOIT utiliser des guillemets simples pour que la commande incluse dans les guillemets ne soit pas évaluée localement, alors ils devraient utiliser "'$ VARIABLE'". Exemple: ssh [email protected] '~/tools/run_pvt.pl' '$ BUILD_NUMBER' "' –

+1

ne savait pas que bash réagit différemment avec des guillemets simples et des guillemets doubles. Merci! – silgon

22

Les variables entre guillemets simples ne sont pas évaluées. Utilisez des guillemets:

ssh [email protected] "~/tools/run_pvt.pl $BUILD_NUMBER" 

Le shell développera les variables entre guillemets, mais pas entre guillemets simples. Cela va changer dans votre chaîne désirée avant d'être passé à la commande ssh.

-1

Escape the variable afin d'accéder à des variables en dehors de la session ssh: ssh [email protected] "~/tools/myScript.pl $ \ BUILD_NUMBER"

+1

Cela ne permet pas d'obtenir ce que la question demande. –

+1

d'un point de vue shell, '' $ FOO'' est équivalent à '" \ $ FOO "'. la question était "comment passer une variable shell avec SSH?". Comme déjà indiqué par @PatrickTrentin ce n'est pas une bonne réponse car la variable d'environnement BUILD_NUMBER n'est pas définie à distance. –

0

Comme déjà répondu, vous n'avez pas besoin Définissez la variable d'environnement sur l'hôte distant. Au lieu de cela, vous pouvez simplement faire la méta-expansion sur l'hôte local et transmettre la valeur à l'hôte distant.

ssh [email protected] '~/tools/run_pvt.pl $BUILD_NUMBER' 

Si vous voulez vraiment régler la variable d'environnement sur l'hôte distant et de l'utiliser, vous pouvez utiliser le programme env

ssh [email protected] "env BUILD_NUMBER=$BUILD_NUMBER ~/tools/run_pvt.pl \$BUILD_NUMBER" 

Dans ce cas, cela est un peu d'un surpuissant, et la note

  • env BUILD_NUMBER=$BUILD_NUMBER-ce que la méta extension sur la locale hôte
  • la re Mote variable d'environnement BUILD_NUMBER sera utilisé par
    shell distant
Questions connexes