здесь-документ дает ошибку «неожиданный конец файла»

Мне нужен мой сценарий для отправки электронной почты с терминала. Основываясь на том, что я видел здесь и во многих других местах в Интернете, я отформатировал его так:

/var/mail -s "$SUBJECT" "$EMAIL" << EOF Here's a line of my message! And here's another line! Last line of the message here! EOF 

Однако, когда я запускаю это, я получаю это предупреждение:

 myfile.sh: line x: warning: here-document at line y delimited by end-of-file (wanted 'EOF') myfile.sh: line x+1: syntax error: unexpected end of file 

… где строка x – последняя написанная строка кода в программе, а строка y – это строка с /var/mail в ней. Я попытался заменить EOF другими вещами ( ENDOFMESSAGE , FINISH и т. Д.), Но безрезультатно. Почти все, что я нашел в Интернете, сделал это так, и я действительно новичок в bash, поэтому мне сложно разобраться в этом самостоятельно. Может ли кто-нибудь помочь?

    Маркер EOF должен быть в начале строки, вы не можете отступать вместе с блоком кода, с которым он идет.

    Если вы пишете <<-EOF вы можете отступывать его, но он должен быть отступом с символами табуляции , а не пробелами. Таким образом, это все равно может не закончиться даже с блоком кода.

    Также убедитесь, что у вас нет пробелов после токена EOF на линии.

    Строка, которая начинается или заканчивается здесь, вероятно, имеет некоторые непечатаемые или пробельные символы (например, возврат каретки), что означает, что второй «EOF» не соответствует первому, и не заканчивается здесь-doc, как должно. Это очень распространенная ошибка, и ее трудно обнаружить только с помощью текстового редактора. Вы можете сделать незапечатаемые символы видимыми, например, с cat :

     cat -A myfile.sh 

    Как только вы увидите вывод cat -A решение будет очевидно: удалите оскорбительные символы.

    Перед EOF попробуйте удалить предыдущие пробелы: –

     /var/mail -s "$SUBJECT" "$EMAIL" <<-EOF 

    Использование вместо для идентификатора AND с использованием << - EOF отлично работает.

    "-" удаляет , а не , но по крайней мере это работает.

    Наряду с другими ответами, упомянутыми Бармаром и Джони, я заметил, что мне иногда приходится оставлять пустую строку до и после моего EOF при использовании <<-EOF .

    Interesting Posts

    Пример кода Resharper для объяснения «Возможное множественное перечисление IEnumerable»

    Добавьте изображение с URL в пользовательские InfoWindow google maps v2

    Оператор массива C ++ с несколькими аргументами?

    Отправка сообщения обработчику мертвой нити при получении местоположения из IntentService

    Диалоговое изображение с четким фоном (не затемнено)

    Как создать SDK для Android со скрытыми и внутренними API-интерфейсами?

    Признать произвольную строку даты

    Открыть файл Excel для чтения с помощью VBA без отображения

    Пограничный радиус в процентах (%) и пикселях (px) или em

    Почему строки неизменны во многих языках программирования?

    VMware Player «Управление> Установка инструментов VMware …» отключен

    6to4 против ISATAP vs Teredo Adapters

    Перенос выбранных приложений из резервной копии Time Machine

    Использовать Task.Run () в синхронном методе, чтобы избежать тупиковой остановки в асинхронном методе?

    Как привязать таблицу в наборе данных к datagrid WPF в C # и XAML

    Давайте будем гением компьютера.