2013-11-14 2 views
10

я получаю следующее сообщение об ошибке, что ослабевает на последнюю строку моего кода (который пуст):Ошибка при использовании Баша здесь-док «неожиданный конец файла»

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 

Что случилось с этим кодом?

EDIT

Благодаря тем, кто помог мне устранить это. В моем скрипте было несколько ошибок. Я использовал пробелы на линии:

echo "Connected to server" 

вместо символов табуляции. Я также включал пробелы перед закрытием ENDSSH, которые вызывали EOF. Эти изменения были частью моей проблемы, но последняя вещь, которая разрешила это, заключалась в удалении дополнительного космического символа, который появился после моего закрытия ENDSSH.

ответ

10

Проблема заключается в пробелах перед закрытием ENDSSH. Выньте все начальные пробелы до ENDSSH.

+0

Я просто попробовал это, и ошибка такая же. : -/ –

+0

Я воспроизвел ту же ошибку, помещая пробелы перед закрытием 'ENDSSSH'. Уходит, когда я разделяю все ведущие пробелы. – anubhava

+1

Я передал свой скрипт в 'hexdump -C' и обнаружил, что он не был ведущим пространством или символами перед' ENDSSH', это был символ «0a» или символ новой строки, следующий за «ENDSSH». Я убрал это, и теперь он работает. Спасибо, что помог мне найти это! –

7

ENDSSH маркер должен быть в левом поле:

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

При использовании <<- ENDSSH вы можете отступ маркера, но он должен быть изрезаны Tab символов, а не пробела.

+0

Я просто попробовал это и на своей строке, где у меня есть' echo «Подключено к серверу!» Я удалил все пробелы и использовал вкладки. Я также удалил пробелы из закрывающего 'ENDSSH', и у меня все еще есть такое же сообщение об ошибке. –

1

При использовании оператора <<- только ведущие вкладки удаляются из документа здесь и строки, содержащей маркер. Вы, кажется, отступаете от закрывающего маркера пробелами, поэтому строка, как представляется, является частью документа здесь, и поскольку документ здесь никогда не закрывается, вы достигаете конца файла при его разборе.

+2

Разве это не то же самое, что я ответил анубхавой? – Barmar

+0

Не было, когда я начал печатать. (Я думаю, что я пропустил ваш комментарий в последнем предложении вашего ответа, хотя). – chepner

Смежные вопросы