Heredocs не могут иметь отступ, как остальная часть скрипта (если только вы не используете -ЕОМ
но тогда вы можете делать отступы только с помощью табуляции). В конце концов, цель heredoc — позволить вам написать что-то, что появится как есть. Это означает, что ЕОМ
не может быть так:
пока что-то;
делать
команда <<ЕОМ
Привет!
ЕОМ
сделано
Вместо этого ЕОМ
(или любой другой пометкой, которую вы используете) должен быть единственным элементом в строке, поэтому не должно быть пробелов или чего-либо еще до или после него. Как это:
пока что-то;
делать
команда <<ЕОМ
Привет!
ЕОМ
сделано
Также обратите внимание, что по причинам, упомянутым выше, начальные пробелы также будут включены, так что это:
с=0;
в то время как [ $c -eq 0 ];
делать
кот <<ЕОМ
Привет!
ЕОМ
пусть С++
сделано
Будет печатать:
$ foo.sh
Привет!
Пока это:
с=0;
в то время как [ $c -eq 0 ];
делать
кот <<ЕОМ
Привет!
ЕОМ
пусть С++
сделано
Будет печатать:
$ foo.sh
Привет!
Наконец, при запуске вашего скрипта я получаю другую ошибку:
$ foo.sh
В настоящее время я нахожусь в следующем каталоге:
/дом/тердон/фу
/home/terdon/scripts/foo.sh: строка 108: предупреждение: здесь-документ в строке 84 разделен концом файла (требуется `EOM')
/home/terdon/scripts/foo.sh: строка 109: синтаксическая ошибка: неожиданный конец файла
Это произойдет потому, что я не предоставляю одни и те же входные данные, и, поскольку вы неправильно завершили EOM, ваши данные, вероятно, обрабатывались сценарием, и поэтому вы увидели другую ошибку. Я ожидаю, что мое исправление избавится от этого, поскольку оно позволило мне запустить ваш скрипт до конца на моей машине.