2013-11-14 33 views
10

我碰到下面的錯誤是在我的代碼的最後一行標記(裏面是空的)「意外的文件結尾」:錯誤這裏-DOC

syntax error: unexpected end of file 

我想不通爲什麼它說這個。我只是試圖用一個here-doc SSH連接:

#!/bin/sh 

connectToServer() { 
    ssh -t [email protected]$1 <<- ENDSSH 
     echo "Connected to server!" 
    ENDSSH 
} 

connectToServer $1 

有什麼不對的代碼?

編輯

感謝你們誰幫我解決這個。我的劇本有兩個錯誤,我正在使用線上的空格:

echo "Connected to server" 

而不是製表符。我還包括導致EOF的關閉ENDSSH之前的空格。這些更改是我的問題的一部分,但解決它的最後一件事是刪除我的關閉ENDSSH後出現的額外空間字符。

回答

10

問題是關閉前的空格ENDSSH。拿出ENDSSH之前的所有領先空間。

+0

我剛試過這個,錯誤是一樣的。 : -/ –

+0

我通過在關閉'ENDSSSH'之前放置空格來重現相同的錯誤,當我剝離所有前導空格時,它將消失。 – anubhava

+1

我將腳本導入到'hexdump -C'中,發現它不是前導空格或'ENDSSH'前的任何字符,它是'ENDSSH'後面的'0a'或換行符。我剝去了它,現在它工作。謝謝你幫我找到這個! –

7

ENDSSH標誌必須是在左邊距:

connectToServer() { 
    ssh -t [email protected]$1 << ENDSSH 
     echo "Connected to server!" 
ENDSSH 
} 

當使用<<- ENDSSH可以縮進標記,但它必須與標籤縮進字符,而不是空格。

+0

我剛剛嘗試過這一點,在我的線上,回聲「連接到服務器!」我刪除了所有空格和使用的選項卡。我也從關閉'ENDSSH'中刪除了空格,並且仍然有相同的錯誤消息。 –

1

當使用<<-運算符時,只有前導標籤從here文檔和包含標記的行中剝離。您似乎正在用空格縮進結束標記,因此該行似乎是here文檔的一部分,並且由於here文檔從不關閉,因此在解析文檔時會到達文件的末尾。

+2

這與anubhava和我的回答不一樣嗎? – Barmar

+0

這不是我開始打字的時候。 (儘管如此,我認爲我錯過了你在答案的最後一句中的評論)。 – chepner