2012-06-30 16 views
5

Próbuję napisać skrypt, aby zalogować się do kilku zdalnych serwerów i wykonać skrypt na każdym serwerze. Chciałbym jednak przekazać zmienną przez ssh. Coś takiego:przekazywanie zmiennych przez ssh

var="/home/dir/" 

    ssh -T $mchname <<'ENDSSH'  
    $var"run_script" <input> output &  
ENDSSH 

Ta naiwna próba nie działa ($ var jest po prostu zerowa). Jaka byłaby poprawna składnia? Z góry dziękuję.

Odpowiedz

4

Usuń cytaty z około ENDSSH. Zapobiegają rozszerzaniu zmiennych w ramach here document.

+0

Ok, to działa. Ale teraz kontrola po prostu wraca do głównego skryptu po zakończeniu "run_script" w $ mchname (nawet jeśli używam "&"), co nie jest tym, czego chcę. Jak mogę to naprawić? Przepraszamy za podstawowe pytania. Jeśli chcesz, możesz wskazać mi jakiś samouczek ssh, w którym mogę to sprawdzić. Dzięki. – user1477337

+0

@ user1477337: Znak ampersand działa na komputerze docelowym i po prostu oznacza, że ​​sterowanie powraca do głównego skryptu szybciej, ponieważ nie musi czekać na zakończenie "run_script". Ale ponieważ nic nie ma po poleceniu 'ssh' i jego dokumencie tutaj, główny skrypt powinien wyjść, gdy tylko zamknie się połączenie' ssh', które powinno być prawie natychmiast. Jeśli jednak jest jakiś powód, dla którego musisz, możesz spróbować przedrostek 'exec' do polecenia' ssh': 'exec ssh ...' Wszystko to jest związane z powłoką i w większości nie jest specyficzne dla 'ssh'. –

2

Spróbuj tego:

var="/home/dir/" 

    ssh -T $mchname VAR=$var 'bash -s'<<'ENDSSH'  
    $VAR"run_script" <input> output &  
ENDSSH 
Powiązane problemy