384 votes

Cygwin - ' \r ' : commande non trouvée - .bashrc / .bash_profile

J'ai Windows, qui utilise Cgywin, et j'essaie de définir JAVA_HOME de façon permanente par le biais de mon système d'exploitation. .bashrc fichier.

.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

en exécutant cygwin :

-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'

Je ne sais pas si j'ai repris les commandes d'un tutoriel destiné à un autre système ou si je manque une étape. Ou bien les espaces blancs font que mes commandes ne s'exécutent pas correctement.

J'ai examiné de nombreuses questions similaires, mais je n'en ai pas trouvé une où la question correspondait exactement à mon erreur.

Merci

EDIT #1 :

mon chemin de retour

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

Je pense donc que les fichiers devraient être placés au bon endroit.

EDIT #2 :

echo ~

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

0 votes

Qu'est-ce que echo ~ donner ?

0 votes

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

8 votes

Le problème n'est pas spécifique à cygwin -- le même problème peut se produire si l'on crée un script sur une machine DOS et que l'on effectue un transfert binaire vers un système Linux pour l'y exécuter ; j'ai retiré la référence à cygwin du titre afin que les personnes ayant ce problème dans d'autres circonstances soient plus susceptibles de prendre la question (et ses réponses non spécifiques à Cygwin) au sérieux.

442voto

jahroy Points 10072

Quand tout échoue dans Cygwin...

Essayez d'exécuter le dos2unix sur le fichier en question.

Cela peut vous aider lorsque vous voyez des messages d'erreur comme celui-ci :

-bash: '\r': command not found

Les caractères de nouvelle ligne de style Windows peuvent causer des problèmes dans Cygwin.

Le site dos2unix modifie les caractères de nouvelle ligne afin qu'ils soient compatibles avec Unix / Cygwin.

ATTENTION : la commande dos2unix modifie les fichiers en place alors prenez des précautions si nécessaire.

Si vous devez conserver le fichier original, vous devez d'abord le sauvegarder.

Note pour les utilisateurs de Mac : Le site dos2unix n'existe pas sur Mac OS X.

Vérifiez cette réponse pour une variété de solutions utilisant différents outils.


Il existe également un unix2dos qui fait l'inverse :

Il modifie les caractères de nouvelle ligne Unix pour les rendre compatibles avec les outils Windows.

Si vous ouvrez un fichier avec Notepad et que toutes les lignes se suivent, essayez unix2dos filename .

1 votes

Superbe, dos2unix l'a réparé, merci. J'ai également ajouté JAVA="$JAVA_HOME"/bin/java aussi et maintenant il trouve mon Java !

7 votes

Soyez prudent avec dos2unix contrairement à la plupart des filtres de texte, il écrase son fichier d'entrée par défaut.

6 votes

Dos2unix m'a permis de garder ma santé mentale.

400voto

Michael P. Bazos Points 14190

Pour ceux qui n'ont pas dos2unix installé (et ne veulent pas l'installer) :

Retirer la queue \r qui provoque cette erreur :

sed -i 's/\r$//' filename

Explication :

Option -i est pour en place nous supprimons la terminaison \r directement dans le fichier d'entrée. Il faut donc veiller à taper le motif correctement.

137voto

Ray Oei Points 608

Pour Windows (shell) avec Notepad++ (vérifié avec la v6.8.3) vous pouvez corriger le fichier spécifique en utilisant l'option - Édition -> Conversion EOL -> format Unix/OSX

Et enregistrez à nouveau votre fichier.

Edit : fonctionne toujours dans la v7.5.1 (29 août 2017)

39voto

J'utilise cygwin et Windows7, l'astuce était de ne PAS mettre le set -o igncr dans votre .bashrc mais de mettre l'ensemble des SHELLOPTS dans vos variables d'environnement sous Windows. (Donc rien avec unix / cygwin...) Je pense que cela ne fonctionne pas à partir de .bashrc car "les gouttes sont déjà sucées". comme on dirait en allemand ;-) Donc mon SHELLOPTS ressemble à ceci braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor

0 votes

Les raisons pour lesquelles SHELLOPTS a besoin d'être fixé dans une Windows au lieu d'une variable d'environnement Cygwin parce que cette variable n'est lue que par bash (d'après "man bash"). Elle doit donc être définie avant le démarrage de votre shell - elle doit donc être placée dans une variable d'environnement Windows.

4 votes

Je voudrais juste clarifier la réponse pour les utilisateurs qui pourraient mal la comprendre : seulement igncr est vraiment nécessaire dans les SHELLOPTS.

0 votes

C'est la seule solution qui a fonctionné pour moi. J'ai une grande base de scripts et exécuter dos2unix sur chacun d'eux n'était pas une option.

37voto

Alvaro Joao Points 4546

TEXTE SUBLIME

Avec sublime, vous allez juste à

View - > Line Endings -> (select)Unix

Puis enregistrez le fichier. Cela résoudra ce problème.

C'est aussi simple que cela !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X