405 Stimmen

' \r ': Befehl nicht gefunden - .bashrc / .bash_profile

Ich habe Windows, verwende Cygwin und versuche, die JAVA_HOME permanent durch mein .bashrc Datei.

.bashrc:

export PATH="$JAVA_HOME/bin:$PATH"  
export JAVA_HOME=$JAVA_HOME:"/cygdrive/c/Program Files (x86)/Java/jdk1.7.0_05"

.bash_profile:

if [ -f ~/.bashrc ]; then
   source ~/.bashrc
fi

Cygwin läuft:

-bash: $'\377\376if': command not found
-bash: $'then\r': command not found
: No such file or directorysu//.bashrc
-bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: syntax error near unexpected token `fi'
-bash: /cygdrive/c/Users/jhsu//.bash_profile: line 3: `fi'

Ich bin mir nicht sicher, ob ich die Befehle aus einem Tutorial übernommen habe, das für ein anderes System gedacht war, oder ob ich einen Schritt übersehen habe. Oder Leerzeichen führen dazu, dass meine Befehle nicht richtig ausgeführt werden.

Ich habe mir mehrere ähnliche Fragen angesehen, aber ich habe keine gefunden, bei der die Frage genau auf meinen Fehler zutrifft.


Mein Heimweg:

$ echo $HOME
/cygdrive/c/Users/jhsu
$ echo ~
/cygdrive/c/Users/jhsu/

Ich glaube also, dass die Dateien an der richtigen Stelle platziert werden sollten.

32voto

U2647 Punkte 430

Versuchen Sie, den folgenden Befehl auszuführen

vim .bashrc
:set ff=unix
:wq!

30voto

Wenn Sie ein aktuelles Cygwin (z.B. 1.7) verwenden, können Sie auch beide .bashrc y .bash_profile mit der folgenden Zeile in der ersten unkommentierten Zeile:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples
(set -o igncr) 2>/dev/null && set -o igncr; # this comment is needed

Damit wird die Bash gezwungen, den Wagenrücklauf ( \r ), die in Windows als Zeilentrennzeichen verwendet werden.

Siehe http://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html .

29voto

kenorb Punkte 134883

Der Fehler:

'\r' : Befehl nicht gefunden

wird dadurch verursacht, dass die Shell nicht in der Lage ist, Windows-ähnliche CRLF-Zeilenenden zu erkennen ( 0d 0a ), denn es erwartet nur LF ( 0a ).


Git

Wenn Sie Git unter Windows verwenden, stellen Sie sicher, dass Sie die Option ' Kasse im Ist-Zustand ' während der Einrichtung. Stellen Sie dann sicher, dass Sie das Programm ausführen: git config --global core.autocrlf false so dass Git beim Auschecken oder Übertragen von Textdateien keine Konvertierungen vornimmt.


dos2unix

Wenn Sie Git nicht verwenden, müssen Sie die betroffenen Dateien/Skripte einfach wieder in Unix-ähnliche Zeilenenden (LF) umwandeln, entweder durch:

dos2unix ~/.bashrc

Anmerkung: Die dos2unix Befehl ist Teil von dos2unix Paket.

Ex/Vim-Editor + tr

Wenn Sie Vim installiert haben, sollte der folgende Befehl die Dateien korrigieren:

ex +'bufdo! %! tr -d \\r' -scxa ~/.bash*

Nützlicher Alias: alias dos2unix="ex +'bufdo! %! tr -d \\\\r' -scxa" .

tr

Hier ist die Methode, bei der tr :

cat ~/.bashrc | tr -d '\r' > ~/.bashrc.fixed && mv -v ~/.bashrc.fixed ~/.bashrc

oder:

tr -d '\r' < filename > new_filename

Anmerkung: Die \r ist gleichbedeutend mit \015 .


sed

Sie können den folgenden Befehl ausprobieren:

sed -i'.bak' s/\r//g ~/.bash*

recode

Die folgenden Aliasnamen können nützlich sein (sie ersetzen dos2unix Befehl):

alias unix2dos='recode lat1:ibmpc'
alias dos2unix='recode ibmpc:lat1'

Quelle: Freie Unix-Tools (ssh, bash, usw.) unter Windows .


perl

Die folgenden perl kann die Datei vom DOS- ins Unix-Format konvertiert werden:

perl -p -i.bak -e 's/\015//g' ~/.bash*

Quelle: Abstreifen der ^M .


tofrodos

Unter Linux, wie z. B. Ubuntu, das nicht standardmäßig mit einer der beiden folgenden Funktionen ausgestattet ist dos2unix o unix2dos können Sie Folgendes installieren tofrodos Paket ( sudo apt-get install tofrodos ), und definieren Sie die folgenden Aliasnamen:

alias dos2unix=’fromdos’
alias unix2dos=’todos’

Verwenden Sie dann die gleiche Syntax wie oben.


Vagrant

Wenn Sie Vagrant VM verwenden und dieses Problem beim Bereitstellungsskript auftritt, versuchen Sie die Einstellung binary Option zu true :

# Shell provisioner, see: https://www.vagrantup.com/docs/provisioning/shell.html
config.vm.provision "shell" do |s|
  s.binary = true # Replace Windows line endings with Unix line endings.
  s.path = "script.sh"
end

Siehe: Windows CRLF-zu-Unix LF-Probleme in Vagrant .

20voto

user1010997 Punkte 513

Sie können auch die Option -o igncr an den Bash-Aufruf, z. B.

bash -x -o igncr script.sh

14voto

Jesse Chisholm Punkte 3589

Gemäß dieser . besteht die Lösung darin, eine ~/.bash_profile (in HOME Verzeichnis), die enthält:

export SHELLOPTS
set -o igncr

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X