2013-11-14 19 views
10

tôi nhận được lỗi sau đó là suy giảm trên dòng cuối cùng của mã của tôi (đó là trống):Lỗi khi sử dụng một bash đây-doc "kết thúc bất ngờ của tập tin"

syntax error: unexpected end of file 

tôi không thể hình tại sao nó lại nói điều này. Tôi chỉ đang cố gắng sử dụng một số here-doc cho kết nối ssh:

#!/bin/sh 

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

connectToServer $1 

Mã này có vấn đề gì?

EDIT

Nhờ những người bạn đã giúp tôi khắc phục sự cố này. Có một vài điều sai trái với kịch bản của tôi; Tôi đang sử dụng dấu cách trên dòng:

echo "Connected to server" 

thay vì ký tự tab. Tôi cũng đã bao gồm khoảng trắng trước khi đóng ENDSSH đã gây ra EOF. Những thay đổi này là một phần của vấn đề của tôi, nhưng điều cuối cùng đã giải quyết là xóa một ký tự khoảng trắng bổ sung xuất hiện SAU KHI đóng ENDSSH của tôi.

Trả lời

10

Sự cố là khoảng trắng trước khi đóng ENDSSH. Đưa ra tất cả các không gian hàng đầu trước ENDSSH.

+0

Tôi vừa thử điều này và lỗi là như nhau. : -/ –

+0

Tôi đã sao chép cùng một lỗi bằng cách đặt dấu cách trước khi đóng 'ENDSSSH' Nó biến mất khi tôi loại bỏ tất cả các dấu cách hàng đầu. – anubhava

+1

Tôi đường ống kịch bản của tôi để 'hexdump -C' và thấy rằng nó không phải là một không gian hàng đầu hoặc bất kỳ ký tự trước' ENDSSH' nó là một '0a' hoặc ký tự newline sau' ENDSSH'. Tôi lột nó đi và bây giờ nó hoạt động. Cảm ơn vì đã giúp tôi tìm thấy điều này! –

7

Các ENDSSH marker có được ở lề trái:

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

Khi sử dụng <<- ENDSSH bạn có thể thụt điểm đánh dấu, nhưng nó phải được thụt vào với Tab ký tự, không có khoảng trắng.

+0

Tôi chỉ cố gắng này và trên dòng của tôi, nơi tôi có' echo "Đã kết nối với máy chủ!" Tôi đã xóa tất cả dấu cách và tab đã sử dụng. Tôi cũng đã loại bỏ các khoảng trống khỏi 'ENDSSH' đóng và tôi vẫn có thông báo lỗi tương tự. –

1

Khi sử dụng toán tử <<-, chỉ các tab hàng đầu bị tước khỏi tài liệu tại đây và dòng có chứa điểm đánh dấu. Dường như bạn đang thụt vào điểm đánh dấu kết thúc bằng dấu cách, vì vậy dòng đó dường như là một phần của tài liệu ở đây và vì tài liệu ở đây không bao giờ đóng, bạn đến cuối tệp trong khi phân tích cú pháp.

+2

Điều này không giống như anubhava và tôi đã trả lời? – Barmar

+0

Không phải khi tôi bắt đầu nhập. (Tôi nghĩ rằng tôi bị mất bình luận của bạn trong câu cuối cùng của câu trả lời của bạn, mặc dù). – chepner

Các vấn đề liên quan