2012-10-23 47 views
5

benim için çalışmıyor şu:ssh uzaktan değişken atama?

ssh [email protected] "k=5; echo $k;" 

Sadece boş satır döndürür.

Uzak oturumda (ssh) bir değişkeni nasıl atayabilirim?

Not: Benim sorum benim ssh oturumuna yerel değişkenleri nasıl geçirileceği konusunda değil, daha çok oluşturabilir ve uzak değişkenleri nasıl atanacağı. (Oldukça yalındır görev olmalıdır?)


Düzenleme:

Daha ayrıntılı olarak bunu yapmak çalışıyorum:

bkp=/some/path/to/backups 
ssh [email protected] "bkps=($(find $bkp/* -type d | sort)); 
         echo 'number of backups: '${#bkps[@]}; 
         while [ ${#bkps[@]} -gt 5 ]; do 
          echo ${bkps[${#bkps[@]}-1]}; 
          #rm -rf $bkps[${#bkps[@]}-1]; 
          unset bkps[${#bkps[@]}-1]; 
         done;" 

bulmak komutu çalışıyor fakat için bazı nedenlerle $bkps doldurulmuyor. Yani benim tahminim ben her şey kontrol ettikten düşünüyorum çünkü

+1

İpucu önce yerel olarak komutu deneyin veya ssh sunucusuna giriş yapın ve deneyin. Bash, ortam değişkenlerini ayarlamak için verme komutunu kullanmanızı gerektirir. ssh [email protected] "dışa aktarma k = 5; echo $ k;" – Codeguy007

+0

@ Codeguy007: Sorunumu daha fazla açıklamamı genişlettim. Aslında herhangi bir ortam değişkenini ayarlamaya çalışmıyorum. Ben basitleştirilmiş sorunun aslında yeniden yönlendirilmesi ile bir ilgisi olduğunu varsayalım. – Pitt

+3

'ssh [email protected] deneyin "k = 5; echo \ $ k;" '. Kabuğun erken genişlemesini önlemek için '$' öncesindeki ters eğik çizgiyi not edin. Çift tırnak yerine tek tırnaklar aynı şeyi gerçekleştirir. – twalberg

cevap

12

bu çağırmayı göz önüne alındığında ..., değişken atama mesele olacağını idi:

ssh [email protected] "k=5; echo $k;" 

yerel kabuk ($k genişleyen hangi büyük olasılıkla ssh ... yürütülmeden önce ayarlanmamıştır. Bu nedenle, bağlantı yapıldıktan sonra gerçek kabuktan geçirilen komut k=5; echo ; (veya , gerçekten yerel olarak ayarlanmışsa).

ssh [email protected] "k=5; echo \$k;" 

Alternatif olarak, yerel genişlemesini önlemek için tek tırnak yerine çift tırnak kullanın: Bunu önlemek için

böyle dolar işareti kaçış. Ancak, bu basit örnek üzerinde çalışırken, aslında uzak tarafa gönderilen komutta bazı değişkenlerin yerel genişletilmesini isteyebilirsiniz, ters eğik çizgi kaçması muhtemelen daha iyi bir yoldur.

Gelecekte başvurmak için, sorun gidermede yardımcı olarak çalıştırılan gerçek komutları yan yana eklemek için kabuğunuza set -x yazabilirsiniz.

+0

"set -x" komutunun nasıl kullanılacağını açıklayabilir misiniz? Ssh komutunun bir parçası mı yoksa sadece bash mı? – Pitt