env: bash \ r: Keine solche Datei oder kein solches Verzeichnis

94

Ich versuche, YouCompleteMe von hier aus zu installieren .

Wenn ich ausführe:

./install.sh --clang-completer

Ich erhalte diesen Fehler:

env: bash\r: No such file or directory

Ich weiß nicht, was mit Umgebungsvariablen falsch ist. Hier ist mein Bash-Pfad:

which bash 
/bin/bash

Muss ich es ändern /usr/bash? Wenn ja, wie soll ich das machen? Ich habe versucht, die ~/.bashrcDatei zu ändern , aber es hat nicht funktioniert.

Brijesh Rakholia
quelle

Antworten:

158

Die Fehlermeldung weist darauf hin, dass das von Ihnen\r aufgerufene Skript eingebettete Zeichen enthält , was wiederum darauf hindeutet, dass es Zeilenenden im Windows-Stil\r\n anstelle der \nerwarteten Zeilenenden hat bash.

Als schnelle Lösung können Sie die \rZeichen entfernen . wie folgt:

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

Hinweis: Die $'...'Zeichenfolge ist ein ANSI-C zitierte Zeichenfolge in unterstützt bash, kshund zsh. Es wird verwendet, um sicherzustellen, dass das \rZeichen zu einem tatsächlichen CR-Zeichen erweitert wird, bevor seddas Skript angezeigt wird, da nicht alle sedImplementierungen selbst \reine Escape-Sequenz unterstützen.

und dann laufen

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

Die größere Frage ist jedoch, warum Sie \r\nDateien im Stil erhalten haben - höchstwahrscheinlich sind auch andere Dateien betroffen.

Vielleicht laufen Sie Git auf Windows , wo eine typische Konfiguration ist im Unix-Stil zu konvertieren \n-nur Zeilenumbrüche im Windows-Stil \r\nZeilenumbrüche auf Dateien auschecken und wieder die Umstellung auf \n-nur Zeilenumbrüche auf begehen .

Während dieser Sinn für macht Entwicklung unter Windows, es in die Quere kommt von Installationsszenarien wie diese.

Um zu machen Git Besuche Dateien mit Unix-Dateiendungen auf Windows - zumindest vorübergehend - Verwendung:

git config --global core.autocrlf false

Führen Sie dann Ihre Installationsbefehle git cloneerneut aus.

Führen Sie aus, um das Verhalten von Git später wiederherzustellen git config --global core.autocrlf true.

mklement0
quelle
28
>vim gradlew
:set fileformat=unix
:wq
>./gradlew clean build
Tuan Nguyen
quelle
17

Ihre Datei hat Windows-Zeilenenden. Wechseln Sie zu Unix-Zeilenenden.

Carl Norum
quelle
13

Bin auf etwas Ähnliches gestoßen. Sie können dos2unix install.shdie Zeilenenden konvertieren. Mehrere Dateien überfind [pattern] | xargs dos2unix

Michael Harris
quelle
1
Sie könnten verwenden:find . -type f -exec dos2unix {} \;
anouchene
13

Schnellbefehl zum Konvertieren des Zeilenendes:

dos2unix thescript.sh
Igonejack
quelle
4

In meinem Fall hatte ich eine falsche Git-Konfiguration. In der Git-Dokumentation heißt es:

Wenn Sie unter Windows programmieren und mit Personen arbeiten, die dies nicht tun (oder umgekehrt), werden Sie wahrscheinlich irgendwann auf Probleme mit dem Zeilenende stoßen

Ich verwende Mac OS und habe genau dieses Problem in einem meiner Projekte. Um es zu lösen, wandte ich mich dem autocrlfzu, truewas falsch war.

Sie können den autocrlfStatus Ihrer Git-Konfiguration folgendermaßen überprüfen :

git config core.autocrlf

Wenn dies zurückkehrt trueund das Problem in einem Git-Repository auftritt, müssen Sie diese Konfiguration in ändern

git config --global core.autocrlf input

auf einem Mac / Unix-System. Nur für Windows-Projekte, die Sie verwenden können

git config --global core.autocrlf false

In meinem Fall habe ich das Git-Repository gelöscht und erneut geklont und danach hat alles wieder wie erwartet funktioniert.

Weitere Informationen finden Sie unter https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

Glücksbringer
quelle
du hast meinen Tag gerettet. Ich hatte 2 Tage lang mit diesem Problem mit dem Ende der Leitung zu kämpfen.
Tahmidur Rahman
3

Wie die obigen Kommentare sagen, geschieht dies aufgrund von Windows-Zeilenenden. Führen Sie die folgenden Schritte aus, um das Problem zu beheben

Für MAC:

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

Für Linux:

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

Und stellen Sie sicher, dass Ihre Git-Konfiguration wie folgt eingestellt ist:

git config --global core.autocrlf input
salvi shahzad
quelle
Endlich arbeiten. Ich war 2 Tage lang mit diesem Problem konfrontiert und es war das Problem der Windows-Zeilenenden aus dem Projekt, das ich aus dem Github geklont habe, und schließlich war Ihre Lösung die perfekte Lösung. Vielen Dank.
Riddhi
1
Ich bin froh, dass es dir geholfen hat :)
salvi shahzad
endlich perfekt funktioniert. Vielen Dank
Muhammad Ashfaq
2

In meinem Fall hatte ich eine falsche Git-Konfiguration. In der Git-Dokumentation heißt es:

Wenn Sie unter Windows programmieren und mit Personen arbeiten, die dies nicht tun (oder umgekehrt), werden Sie wahrscheinlich irgendwann auf Probleme mit dem Zeilenende stoßen

Ich verwende Mac OS und habe genau dieses Problem in einem meiner Projekte. Um es zu lösen abgestimmt ich autocrlfzu true.

Sie können den autocrlfStatus Ihrer Git-Konfiguration folgendermaßen überprüfen :

git config core.autocrlf

Wenn dies zurückkehrt trueund das Problem in einem Git-Repository auftritt, müssen Sie diese Konfiguration in ändern

git config --global core.autocrlf input

Welches ist das richtige für Mac / Unix-Systeme. Nur für Windows-Projekte, die Sie verwenden können

git config --global core.autocrlf false

In meinem Fall habe ich das Git-Repository gelöscht und erneut ausgecheckt und danach hat alles wieder wie erwartet funktioniert.

Weitere Informationen finden Sie unter https://www.git-scm.com/book/en/v2/Customizing-Git-Git-Configuration

Glücksbringer
quelle