2013-06-11 60 views
1

編輯:變量W /空格+ SSH

它出現在我的首要問題是通過對每一個迭代循環處理「字」是在遠程主機上空。 COLORS變量在我回顯時看起來很好,它顯示了所有四種顏色。

我有一個bash腳本使用FOR循環通過ssh這樣調用:

ssh [email protected] <<EOF 

COLORS=RED GREEN WHITE ORANGE 

for word in $COLORS; do 
echo $word 
done 

exit 
EOF 

我的輸出看起來像這樣但是:

ORANGE 
ORANGE 
ORANGE 
ORANGE 

for循環標識4空間delmited ARGS在COLOURS變量,因爲它循環並回聲4次,它只顯示最後一個參數ORANGE。我可以改變什麼,以便每個參數都得到迴應?

+2

關於改變'COLORS什麼=紅色綠色白色ORANGE'到'顏色= 「紅色綠色白橙」'? – fedorqui

+0

,似乎沒有工作,我得到這個錯誤:「回聲ORANGE:沒有這樣的文件或目錄」 – gjw80

回答

4

2個問題:

  1. 各地變量賦值把雙引號: COLORS="RED GREEN WHITE ORANGE"
  2. 在HEREDOC使用時逃離$

下面的代碼工作:

ssh [email protected] <<EOF 

COLORS="RED GREEN WHITE ORANGE" 

for word in \$COLORS; do 
echo \$word 
done 

EOF 

我也是從它去掉了非必要的退出聲明。

+0

對我不起作用,變量未在腳本中聲明。它們被設置在被注入到構建中的屬性文件中。腳本/變量在沒有ssh的情況下運行正常,但在其內部導致問題。 – gjw80

+0

好的...我的回答是基於你輸入的任何腳本:-)除非你給你使用的「屬性文件機制」,否則我將無法更新答案... – anishsane

+0

我的解決方案是改變變量在FOR循環中的名稱與轉義$一起使用。在使用'word'時,看起來像ORANGE仍然保存在本地host01上的第一次迭代中,當我更改爲'arg',然後在ssh會話中按照預期工作時轉義$。謝謝! – gjw80

0

放「」周圍的顏色 原因在這一點上,我認爲它看到的顏色變量=橙色。這是我的猜測,因爲for循環很好。

+0

的變量或值? – gjw80

+0

COLORS =「RED GREEN WHITE ORANGE」 – Franko

4

你需要保護$COLORS$word變量從擴展你這裏-doc的。它們在發送到遠程系統之前會在本地系統上進行擴展,並且您的本地環境當前包含相當於COLORS="RED GREEN WHITE ORANGE"word=ORANGE,可能是因爲您在嘗試遠程運行它之前已在本地測試了您的小腳本。

有一對夫婦的方式來完成你所需要的。可能是最清晰的是:

ssh [email protected] <<'EOF' 
.... 
EOF 

注意周圍EOF單引號的入門線。另外,您也可以保持這裏-doc的規格爲是,和逃避腳本中$跡象:

ssh [email protected] <<EOF 
.... 
for word in \$COLORS; do 
    echo \$word 
done 
EOF 

這將保護只從局部擴張逃脫的具體變量,並且在存在的情況是非常有用的有些變量您希望在本地進行擴展,而另一些則需要在遠程端進行擴展。

0

引用here documents工作:

ssh host <<'EOF' 
COLORS='RED GREEN WHITE ORANGE' 
for word in $COLORS; do 
    echo "$word" 
done 
EOF 

一些注意事項:

  • 你不需要exit。從man ssh

    The session terminates when the command or shell on the remote machine exits and all X11 and TCP connections have been closed.

  • Use More Quotes™