2012-06-30 37 views
5

Birkaç uzak sunucuya giriş yapmak ve her sunucuya bir komut dosyası yürütmek için bir komut dosyası yazmaya çalışıyorum. Bununla birlikte, bir değişkeni ssh üzerinden geçirmek istiyorum. Böyle bir şey:ssh ile geçen değişkenleri geçirme

var="/home/dir/" 

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

Bu naif deneme çalışmıyor ($ var, basitçe boştur). Doğru sözdizimi ne olurdu? Şimdiden teşekkürler.

cevap

4

Tırnak işaretlerini yaklaşık ENDSSH'dan kaldırın. here document içinde değişkenlerin genişlemesini önlerler.

+0

Tamam, bu çalışır. Fakat şimdi kontrol, "run_script" $ mchname'de ('&' kullanıyorum bile olsa) bitince ana betiğe dönüyor. Bunu nasıl düzeltebilirim? Temel sorular için üzgünüm. Eğer istersen, bu şeylere bakabileceğim bir ssh öğreticisine işaret edebilirsin. Teşekkürler. – user1477337

+0

@ user1477337: Ve işareti, hedef makinede etkindir ve sadece "run_script" işleminin tamamlanmasını beklememesi gerektiğinden, denetimin ana komut dosyasına daha hızlı döndüğü anlamına gelir. Ancak, ssh komutundan ve belgenin belgesinden sonra hiçbir şey olmadığı için, ssh bağlantısının hemen kapanması durumunda ana komut hemen çıkmalıdır. Ancak, gerek duyduğunuz bazı nedenler varsa, 'exec '' ssh 'komutuna önekleme işlemini deneyebilirsiniz: exec ssh ... Bu durumun tümü kabuk ile ilgilidir ve çoğunlukla' ssh 'özel değildir. –

2

bu deneyin:

var="/home/dir/" 

    ssh -T $mchname VAR=$var 'bash -s'<<'ENDSSH'  
    $VAR"run_script" <input> output &  
ENDSSH 
İlgili konular