На этот вопрос уже есть ответ здесь:
У меня есть сервер под управлением Ubuntu 18.04 LTS, я использовал его для размещения моих личных вещей, потокового мультимедиа, ботов и создания сборок android. Месяц назад я увидел некоторые ошибки при выполнении скрипта envsetup.sh
, который подготавливает окружение для начала сборки. Ссылка на скрипт. Вот вывод:
miguel@mike-machine:/home/builds/sources/PixysOS$ . build/envsetup.sh
bash: build/envsetup.sh: line 1: syntax error near unexpected token `$'{\r''
'ash: build/envsetup.sh: line 1: `function hmm() {
Я попробовал выполнить его на другой машине (Manjaro 18 KDE) и не имел проблем, там я временно собирал. Я думаю, что это проблема с bash, но я sudo apt-get install --reinstall bash
, но я все равно получаю то же самое.
Это почти наверняка, потому что Вы сохранили сценарий с окончаниями строки DOS-style CRLF.
Напр. учитывая минимальный файл сценария
$ cat bad.sh
function hmm() {
cat <<EOF
Run "m help" for help with the build system itself.
EOF
}
это было сохранено с окончаниями строки DOS, как показано file
команда
$ file bad.sh
bad.sh: ASCII text, with CRLF line terminators
затем
$ . ./bad.sh
bash: ./bad.sh: line 1: syntax error near unexpected token `$'{\r''
'ash: ./bad.sh: line 1: `function hmm() {
но
$ dos2unix bad.sh
dos2unix: converting file bad.sh to Unix format...
$ . ./bad.sh
$ hmm
Run "m help" for help with the build system itself.
Можно найти dos2unix
пакет в Ubuntu universe
репозиторий - иначе можно использовать sed
удалить \r
символы или vi
set ff=unix
например.