2010-07-23 25 views
60

que quiero ser capaz de ejecutar un comando de mi máquina usando ssh y pasar a través de la variable de entorno $BUILD_NUMBERpasar variables en orden ssh remoto

Esto es lo que estoy tratando:

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

$BUILD_NUMBER es configurado en la máquina que realiza la llamada ssh y dado que la variable no existe en el host remoto, no se recupera.

¿Cómo paso el valor de $BUILD_NUMBER?

+1

no relacionado con Hudson, retira la etiqueta. (Hudson solo crea la variable) –

Respuesta

116

Si utiliza

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

en lugar de

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

su cáscara se interpolar la $BUILD_NUMBER antes de enviar la cadena de comandos al host remoto.

+1

Si alguien DEBE usar comillas simples para que el comando incluido en las comillas no se evalúe localmente, entonces debe usar "'$ VARIABLE'". Ejemplo: ssh [email protected] '~/tools/run_pvt.pl "' $ BUILD_NUMBER '"' –

+1

no sabía que bash reacciona de manera diferente con comillas simples y comillas dobles. ¡Gracias! – silgon

22

Las variables en comillas simples no se evalúan. Use comillas dobles:

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

El shell expandirá las variables entre comillas dobles, pero no entre comillas simples. Esto cambiará a la cadena deseada antes de pasarse al comando ssh.

-1

Escapar de la variable con el fin de acceder a las variables fuera de la sesión ssh: ssh [email protected] "~/herramientas/myScript.pl \ $ BUILD_NUMBER"

+1

Esto no logra lo que la pregunta está pidiendo. –

+1

desde el punto de vista del depósito, ''$ FOO'' es equivalente a' "\ $ FOO" '. la pregunta era "¿cómo pasar una variable de shell con SSH?". Como ya dijo @PatrickTrentin, esta no es una respuesta correcta porque la variable de entorno 'BUILD_NUMBER' no está configurada de forma remota. –

0

como respondida anteriormente, no es necesario establecer la variable de entorno en el host remoto. En su lugar, puede simplemente hacer la metaexpansión en el host local y pasar el valor al host remoto.

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

Si realmente desea establecer la variable de entorno en el host remoto y utilizarlo, puede utilizar el programa

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

env En este caso se trata de un poco de una exageración, y la nota

  • env BUILD_NUMBER=$BUILD_NUMBER hace la expansión meta en el local de anfitrión
  • la re mote variable de BUILD_NUMBER ambiente será utilizada por
    la shell remoto
Cuestiones relacionadas