env: bash \ r: нет такого файла или каталога

93

Я пытаюсь установить YouCompleteMe отсюда .

Когда я выполняю:

./install.sh --clang-completer

Я получаю такую ​​ошибку:

env: bash\r: No such file or directory

Я не знаю, что не так с переменными окружения. Вот мой путь к bash:

which bash 
/bin/bash

Мне нужно изменить его на /usr/bash? Если да, то как мне это сделать? Я попытался сменить ~/.bashrcфайл, но ничего не вышло.

Бриджеш Рахолия
источник

Ответы:

158

Сообщение об ошибке предполагает, что вызываемый вами скрипт имеет встроенные \rсимволы , что, в свою очередь, предполагает, что он имеет окончания строки в стиле Windows,\r\n а не \nожидаемые окончания строки bash.

В качестве быстрого исправления вы можете удалить \rсимволы. следующим образом:

sed $'s/\r$//' ./install.sh > ./install.Unix.sh

Примечание: $'...'строка является ANSI-C строка в кавычках поддерживается bash, kshи zsh. Он используется для обеспечения того, \rчтобы символ расширялся до фактического символа CR до того, как sedувидит сценарий, потому что не все sedреализации сами по себе поддерживают \rescape-последовательность.

а затем запустить

./install.Unix.sh --clang-completer

Однако более серьезный вопрос заключается в том, почему у вас \r\nостались файлы -style - скорее всего, затронуты и другие файлы.

Возможно , вы работаете с Git на Windows , , где типичная конфигурация заключается в преобразовании Unix-стиль \n-Только разрывов строк в Windows , стиль \r\nразрывы строк на проверку файлов из и повторного преобразования в \n-Только разрывы строк на совершение .

Хотя это имеет смысл для разработки под Windows, это мешает подобным сценариям установки .

Чтобы Git извлекал файлы с окончанием файлов в стиле Unix в Windows - хотя бы временно - используйте:

git config --global core.autocrlf false

Затем git cloneснова запустите ваши команды установки .

Чтобы позже восстановить поведение Git, запустите git config --global core.autocrlf true.

mklement0
источник
28
>vim gradlew
:set fileformat=unix
:wq
>./gradlew clean build
Туан Нгуен
источник
17

В вашем файле есть окончания строки Windows. Измените на окончания строк Unix.

Карл Норум
источник
13

Наткнулся на нечто подобное. Вы можете использовать dos2unix install.shдля преобразования окончаний строк. Несколько файлов черезfind [pattern] | xargs dos2unix

Майкл Харрис
источник
1
Вы можете использовать:find . -type f -exec dos2unix {} \;
s.ouchene
13

Быстрая команда для преобразования окончания строки:

dos2unix thescript.sh
игонджек
источник
3

В моем случае у меня была неправильная конфигурация git. В документации git указано:

Если вы программируете в Windows и работаете с людьми, которые этого не делают (или наоборот), вы, вероятно, в какой-то момент столкнетесь с проблемами окончания строки

Я использую Mac OS и именно эта проблема у меня есть в одном из моих проектов. Чтобы решить эту проблему, я обратился autocrlfк тому, trueчто было не так.

Вы можете проверить autocrlfсостояние вашей конфигурации git следующим образом:

git config core.autocrlf

Так что, если это вернется, trueи проблема возникнет в репозитории git, вам придется изменить эту конфигурацию на

git config --global core.autocrlf input

в системе Mac / Unix. Только для проектов Windows вы можете использовать

git config --global core.autocrlf false

В моем случае я удалил репозиторий git и снова клонировал его, и после этого все снова заработало, как ожидалось.

Узнайте больше на https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

счастливчик
источник
3

Как говорится в комментариях выше, это происходит из-за окончаний строк в Windows. Чтобы устранить проблему, выполните следующие действия.

Для MAC:

brew install dos2unix # Installs dos2unix Mac
find . -type f -exec dos2unix {} \; # recursively removes windows related stuff

Для Linux:

sudo apt-get install -y dos2unix # Installs dos2unix Linux
sudo find . -type f -exec dos2unix {} \; # recursively removes windows related stuff

И убедитесь, что ваша конфигурация git настроена следующим образом:

git config --global core.autocrlf input
Салви Шахзад
источник
Наконец-то работает. Я столкнулся с этой проблемой в течение 2 дней, и это было связано с окончанием строки Windows из проекта, который я клонировал из github, и, наконец, ваше решение было идеальным решением. Спасибо.
Риддхи
1
Я рад, что это вам помогло :)
salvi shahzad
наконец-то сработало отлично. Большое вам спасибо
Мухаммад Ашфак
2

В моем случае у меня была неправильная конфигурация git. В документации git указано:

Если вы программируете в Windows и работаете с людьми, которые этого не делают (или наоборот), вы, вероятно, в какой-то момент столкнетесь с проблемами окончания строки

Я использую Mac OS и именно эта проблема у меня есть в одном из моих проектов. Чтобы решить эту проблему, я настроился autocrlfна true.

Вы можете проверить autocrlfсостояние вашей конфигурации git следующим образом:

git config core.autocrlf

Так что, если это вернется, trueи проблема возникнет в репозитории git, вам придется изменить эту конфигурацию на

git config --global core.autocrlf input

что является правильным для систем Mac / Unix. Только для проектов Windows вы можете использовать

git config --global core.autocrlf false

В моем случае я удалил репозиторий git и снова проверил его, и после этого все снова заработало, как ожидалось.

Узнайте больше на https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

счастливчик
источник