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.

2voto

Walk Points 537

Le problème peut survenir à cause du fichier/script créé/téléchargé depuis une machine Windows. Veuillez essayer de convertir le fichier au format linux.

dos2unix ./script_name.sh

ou

dos2unix ~/.bashrc

2voto

Evan Donovan Points 326

Si le paquetage vim est installé sur votre installation Cygwin, vous pouvez utiliser vim pour résoudre ce problème sans avoir à chercher et remplacer. Lancez vim comme suit : vim filename.sh (souvent, il est aussi aliasé vi). Ensuite, tapez :set fileformat=unix entonces :wq (write & quit) pour enregistrer vos modifications. (La : vous met dans le mode d'édition de vim).

Je le recommande plutôt que dos2unix car vim est probablement plus couramment installé.

Cependant, il est probablement préférable de configurer votre éditeur de texte pour que les fichiers que vous prévoyez d'utiliser dans un environnement Unix/Linux soient enregistrés dans un format texte Unix. Les réponses données ci-dessus pour Notepad++ en sont un bon exemple.

Remarque supplémentaire : si vous n'êtes pas sûr du type de fichier (DOS ou Unix), vous pouvez utiliser la fonction file filename.sh . Cela peut notamment aider à déboguer des problèmes plus obscurs (tels que des problèmes d'encodage lors de l'importation de vidages SQL provenant de Windows).

Pour d'autres options sur la façon de modifier le formatage des fichiers texte, voir cet article de la base de connaissances IU

Vous trouverez plus d'informations sur les scripts Bash et les fins de ligne sur le site suivant cette question de StackOverflow .

1voto

Danny Schoemann Points 318

Sur EditPlus vous le faites à partir du Document File Format (CR/LF) Change File Format... puis choisissez le menu Unix / Mac OS X bouton radio.

-1voto

1. Choix

EditorConfig EditorConfig - est mon choix.


2. Pertinence

Cette réponse est pertinente pour le mois de mars 2018. À l'avenir, les données de cette réponse peuvent être obsolètes.

L'auteur de cette réponse a personnellement utilisé EditorConfig en mars 2018.


3. Limites

Vous devez utiliser un des IDE/éditeurs supportés .


4. Argumentation

  1. Une simple utilisation. Je dois régler mon .editorconfig fichier 1 fois, où je crée mon projet, je peux oublier certains problèmes spécifiques à la plate-forme, au style et à l'IDE .
  2. multiplateforme, multi-langues, multi-IDE, multi-moniteurs. .

5. Exemple

5.1. Simple

J'installe Plugin EditorConfig pour Sublime Text mon éditeur de texte. J'édite des fichiers dans Sublime Text.

Par exemple, j'ai sashacrlf.sh archivo:

echo "Sasha" &
echo "Goddess!" &

J'exécute ce fichier dans Cygwin :

$ bash sashacrlf.sh
Sasha
sashacrlf.sh: line 1: $'\r': command not found
Goddess!

Je crée un fichier .editorconfig dans le même projet que sashacrlf.sh .

[*.sh]
end_of_line = lf

Cela signifie que, si vous sauvegardez un fichier avec .sh dans votre projet dans votre éditeur, EditorConfig définit les fins de ligne UNIX pour ce fichier.

Je sauve sashacrlf.sh dans mon éditeur de texte à nouveau. J'exécute sashacrlf.sh encore :

$ bash sashacrlf.sh
Sasha
Goddess!

Je n'arrive pas à obtenir une sortie inattendue dans la console.

5.2. Extensions de fichiers multiples

Par exemple, je veux avoir des terminaisons de ligne UNIX dans tous les fichiers avec des extensions .sh , .bashrc y .bash_profile . J'ajoute ces lignes à mon .editorconfig archivo:

[*.{sh,bashrc,bash_profile}]
end_of_line = lf

Maintenant, si je sauvegarde un fichier avec .sh , .bashrc o .bash_profile l'EditorConfig définit automatiquement la fin de ligne UNIX pour ce fichier.


6. Liens supplémentaires

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