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.

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.




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


1
Możesz użyć:find . -type f -exec dos2unix {} \;
s.ouchene


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


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

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


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.