env: bash \ r: Nie ma takiego pliku lub katalogu

93

Próbuję zainstalować YouCompleteMe stąd .

Kiedy wykonuję:

./install.sh --clang-completer

Otrzymuję ten błąd:

env: bash\r: No such file or directory

Nie wiem, co jest nie tak ze zmiennymi środowiskowymi. Oto moja ścieżka bash:

which bash 
/bin/bash

Czy muszę to zmienić na /usr/bash? Jeśli tak, to jak mam to zrobić? Próbowałem zmienić ~/.bashrcplik, ale to nie zadziałało.

Brijesh Rakholia
źródło

Odpowiedzi:

158

Komunikat o błędzie sugeruje, że skrypt, który wywołujesz, ma osadzone \rznaki , co z kolei sugeruje, że zawiera zakończenia linii w stylu Windows\r\n zamiast oczekiwanych końcówek - \nonly line bash.

W ramach szybkiego rozwiązania możesz usunąć \rznaki. następująco:

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

Uwaga: $'...'Ciąg jest ANSI-C cudzysłowie obsługiwane bash, kshi zsh. Służy do upewnienia się, że \rprzed sedwyświetleniem skryptu rozwijany jest do rzeczywistego znaku CR , ponieważ nie wszystkie sedimplementacje same obsługują\r sekwencję ucieczki.

a potem biegnij

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

Jednak większe pytanie brzmi, dlaczego skończyło się na \r\nplikach w stylu-- najprawdopodobniej dotyczy to również innych plików.

Być może korzystasz z Git w systemie Windows , gdzie typowa konfiguracja polega na przekonwertowaniu \npodziałów wierszy tylko w stylu uniksowym \r\nna podziały wierszy w stylu systemu Windows przy wypisywaniu plików i ponownej konwersji na \ntylko podziały wierszy przy zatwierdzaniu .

Chociaż ma to sens w przypadku programowania w systemie Windows, przeszkadza w scenariuszach instalacji takich .

Aby Git pobierał pliki z końcówkami w stylu uniksowym w systemie Windows - przynajmniej tymczasowo - użyj:

git config --global core.autocrlf false

Następnie uruchom git cloneponownie polecenia instalacji dotyczące .

Aby później przywrócić zachowanie Gita, uruchom git config --global core.autocrlf true.

mklement0
źródło
28
>vim gradlew
:set fileformat=unix
:wq
>./gradlew clean build
Tuan Nguyen
źródło
17

Twój plik ma zakończenia linii Windows. Zmień na końcówki linii Unix.

Carl Norum
źródło
13

Wpadłem na coś podobnego. Możesz użyć dos2unix install.shdo konwersji zakończeń linii. Wiele plików za pośrednictwemfind [pattern] | xargs dos2unix

Michael Harris
źródło
1
Możesz użyć:find . -type f -exec dos2unix {} \;
s.ouchene
13

Szybkie polecenie konwersji zakończenia linii:

dos2unix thescript.sh
igonejack
źródło
3

W moim przypadku miałem złą konfigurację gita. Dokumentacja git stwierdza:

Jeśli programujesz w systemie Windows i pracujesz z osobami, które nie są (lub odwrotnie), prawdopodobnie w pewnym momencie napotkasz problemy z zakończeniem linii

Używam systemu Mac OS i dokładnie mam ten problem w jednym z moich projektów. Aby go rozwiązać, zwróciłem się autocrlfdo tego, trueco było złe.

Możesz sprawdzić autocrlfstan swojej konfiguracji git w ten sposób:

git config core.autocrlf

Więc jeśli to powróci, truea problem wystąpi w repozytorium git, będziesz musiał zmienić tę konfigurację na

git config --global core.autocrlf input

w systemie Mac / Unix. Tylko dla projektów Windows, których możesz użyć

git config --global core.autocrlf false

W moim przypadku usunąłem repozytorium git i sklonowałem je ponownie, a potem wszystko działało ponownie zgodnie z oczekiwaniami.

Dowiedz się więcej na https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

luckyhandler
źródło
3

Jak mówią powyższe komentarze, dzieje się tak z powodu zakończeń linii okien. Aby rozwiązać ten problem, wykonaj następujące kroki

Dla Maca:

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

W systemie Linux:

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

I upewnij się, że Twoja konfiguracja git jest ustawiona w następujący sposób:

git config --global core.autocrlf input
salvi shahzad
źródło
Wreszcie działa. Miałem do czynienia z tym problemem przez 2 dni i było to spowodowane zakończeniami linii Windows z projektu, który sklonowałem z githuba i ostatecznie Twoje rozwiązanie było idealnym rozwiązaniem. dzięki.
Riddhi
1
Cieszę się, że ci pomogło :)
salvi shahzad
w końcu zadziałało idealnie. dziękuję bardzo
Muhammad Ashfaq
2

W moim przypadku miałem złą konfigurację gita. Dokumentacja git stwierdza:

Jeśli programujesz w systemie Windows i pracujesz z osobami, które nie są (lub odwrotnie), prawdopodobnie w pewnym momencie napotkasz problemy z zakończeniem linii

Używam systemu Mac OS i dokładnie mam ten problem w jednym z moich projektów. Aby go rozwiązać, dostroiłem autocrlfsię true.

Możesz sprawdzić autocrlfstan swojej konfiguracji git w ten sposób:

git config core.autocrlf

Więc jeśli to powróci, truea problem wystąpi w repozytorium git, będziesz musiał zmienić tę konfigurację na

git config --global core.autocrlf input

który jest poprawny dla systemów Mac / Unix. Tylko dla projektów Windows, których możesz użyć

git config --global core.autocrlf false

W moim przypadku usunąłem repozytorium git i sprawdziłem je ponownie, a potem wszystko znów działało zgodnie z oczekiwaniami.

Dowiedz się więcej na https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

luckyhandler
źródło