2010-07-23 18 views
60

Chcę być w stanie uruchomić polecenie z mojego komputera za pomocą SSH i przechodzą przez zmienną środowiskową $BUILD_NUMBERzmienne przekazując polecenia zdalnego ssh

Oto co usiłuję:

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

$BUILD_NUMBER jest ustawiona na urządzeniu wykonującym wywołanie ssh, a ponieważ zmienna nie istnieje na zdalnym hoście, nie jest pobierana.

Jak przekazać wartość $BUILD_NUMBER?

+1

niezwiązane Hudson, usunięto tag. (Hudson po prostu tworzy zmienną) –

Odpowiedz

116

Jeśli używasz

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

zamiast

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

swojej skorupy będzie interpolacji $BUILD_NUMBER przed wysłaniem ciąg poleceń do zdalnego hosta.

+1

Jeśli ktoś MUSI używać pojedynczych cudzysłowów, aby polecenie zawarte w cudzysłowach nie było oceniane lokalnie, wówczas powinno używać "'$ VARIABLE" ". Przykład: ssh [email protected] '~/tools/run_pvt.pl "' $ BUILD_NUMBER" "' –

+1

nie wiedział, że bash reaguje inaczej z pojedynczymi cudzysłowami i podwójnymi cudzysłowami. Dzięki! – silgon

22

Zmienne w pojedynczych cudzysłowach nie są oceniane. Użyj podwójnego cudzysłowu:

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

Powłoka rozszerzy zmienne w podwójnych cudzysłowach, ale nie w cudzysłowach. To zmieni się w pożądany ciąg przed przekazaniem do polecenia ssh.

-1

Ucieczka zmienną w celu uzyskania dostępu do zmiennych poza sesji ssh: ssh [email protected] „~/Narzędzia/myScript.pl \ $ BUILD_NUMBER”

+1

Nie osiąga się tego, o co pyta. –

+1

z punktu widzenia powłoki, ''$ FOO'' jest równoważne' '\ $ FOO" '. pytanie brzmiało "jak przekazać zmienną powłoki za pomocą SSH?". Jak już stwierdzono przez @PatrickTrentin, nie jest to poprawna odpowiedź, ponieważ wtedy zmienna środowiskowa 'BUILD_NUMBER' nie jest ustawiana zdalnie. –

0

Jak odpowiedział wcześniej, nie trzeba ustaw zmienną środowiskową na zdalnym hoście. Zamiast tego można po prostu wykonać meta-rozszerzenie na hoście lokalnym i przekazać wartość do zdalnego hosta.

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

Jeśli naprawdę chcesz, aby ustawić zmienną środowiskową na zdalnym komputerze i korzystać z niego, można użyć programu

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

env W tym przypadku jest to trochę overkill, a uwaga

  • env BUILD_NUMBER=$BUILD_NUMBER robi meta ekspansję na lokalnym przyjmującym
  • ponownego pyłek zmienna BUILD_NUMBER środowisko będzie używany przez
    zdalnego powłoki
Powiązane problemy