2010-07-23 1 views
60

che voglio essere in grado di eseguire un comando dalla mia macchina con ssh e passare attraverso la variabile d'ambiente $BUILD_NUMBERvariabili passando comando ssh remoto

Ecco quello che sto cercando:

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

$BUILD_NUMBER è impostato sulla macchina che effettua la chiamata ssh e poiché la variabile non esiste sull'host remoto, non viene prelevata.

Come si passa il valore di $BUILD_NUMBER?

+1

estranei a Hudson, rimosso il tag. (Hudson crea semplicemente la variabile) –

risposta

116

Se si utilizza

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

invece di

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

la shell sarà interpolare la $BUILD_NUMBER prima di inviare la stringa di comando per l'host remoto.

+1

Se qualcuno DEVE usare le virgolette singole in modo che il comando incluso nelle virgolette non sia valutato localmente, allora dovrebbero usare "'$ VARIABLE'". Esempio: ssh [email protected] '~/tools/run_pvt.pl "' $ BUILD_NUMBER '"' –

+1

non sapeva che bash reagisce in modo diverso con virgolette singole e doppie virgolette. Grazie! – silgon

22

Le variabili tra virgolette singole non vengono valutate. Utilizzare le virgolette doppie:

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

La shell si espanderà variabili tra virgolette, ma non in apici singoli. Questo cambierà nella stringa desiderata prima di essere passato al comando ssh.

-1

fuga la variabile al fine di accedere alle variabili al di fuori della sessione ssh: ssh [email protected] "~/tools/myScript.pl \ $ BUILD_NUMBER"

+1

Questo non raggiunge ciò che la domanda sta chiedendo. –

+1

dal punto di vista della shell, ''$ FOO'' equivale a' "\ $ FOO" '. la domanda era "come passare una variabile di shell con SSH?". Come già affermato da @PatrickTrentin, questa non è una risposta corretta perché la variabile di ambiente 'BUILD_NUMBER' non è impostata in remoto. –

0

come risposta in precedenza, non è necessario per imposta la variabile d'ambiente sull'host remoto. Invece, puoi semplicemente fare la meta-espansione sull'host locale e passare il valore all'host remoto.

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

Se davvero si vuole impostare la variabile d'ambiente sul host remoto e utilizzarlo, è possibile utilizzare il programma

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

env In questo caso si tratta di un po 'di un eccessivo, e la nota

  • env BUILD_NUMBER=$BUILD_NUMBER fa il meta espansione sul locale ospite
  • la ri mote variabile BUILD_NUMBER ambiente verrà utilizzato dal
    shell remota