2012-10-08 127 views
3

我需要遠程運行腳本。我正在使用以下shell腳本使用shell腳本遠程運行本地腳本文件

for server in $servers 
    do 
    LOCAL_VAR=<some_value> 
    ssh $server <<EOF 
     command1 $LOCAL_VAR 
     command2.. 
     .. 
     exit 
     EOF 
    done 

bash顯示意外的文件語法錯誤結束。如果我刪除此塊,其餘代碼工作正常。您能否告訴我遠程執行腳本的正確方法。

+0

您的'EOF'是否縮進?它不應該。 –

+0

雅是它。 sputnick的解決方案完美工作 –

回答

2

如果你想放的縮進,如在你的here-doc,你應該添加一個-如下面的代碼:

for server in $servers 
do 
    LOCAL_VAR=<some_value> 
    ssh $server <<-EOF 
    command1 $LOCAL_VAR 
    command2.. 
    .. 
    exit 
    EOF 
done 
與標籤

小心,當你複製粘貼此,有時你可以有驚喜或空間。

1

您的關閉heredoc的EOF不能有任何前導空格。在查找腳本結束之前,Bash認爲它沒有到達字符串的末尾。

http://tldp.org/LDP/abs/html/here-docs.html

收盤限制字符串,在這裏文件的最後一行,必須在第一個字符位置開始。不能有空白。在限制字符串後面跟隨空格同樣會導致意外行爲。空格可以防止限制字符串被識別。

+1

是的,可以看到我的POST;) –

+0

有趣。我不知道。 – jimp

1

解決方案是在第1列中具有文字標籤的腳本。 tl; dr字面標籤沒有縮進(EOF)