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.




13

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


1
Вы можете использовать:find . -type f -exec dos2unix {} \;
s.ouchene


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


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.