J'utilise Windows pour utiliser Cygwin et essayer de définir Java_HOME
de manière permanente via mon fichier .bashrc
.
. 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 cours d'exécution:
-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 pris les commandes d'un tutoriel destiné à un autre système ou s'il me manque une étape. Ou bien les espaces empêchent mes commandes de fonctionner correctement.
J'ai examiné plusieurs questions similaires, mais je n'en ai trouvé aucune où la question comporte exactement mon erreur.
Mon chemin chez moi:
$ echo $HOME
/cygdrive/c/Users/jhsu
$ echo ~
/cygdrive/c/Users/jhsu/
Je pense donc que les fichiers doivent être placés au bon endroit.
Quand tout échoue dans Cygwin ...
Essayez d’exécuter la commande dos2unix
sur le fichier en question.
Cela peut 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.
La commande dos2unix
modifie les caractères de nouvelle ligne afin qu’ils soient compatibles Unix/Cygwin.
ATTENTION: la commande dos2unix modifie les fichiers à la place , prenez donc des précautions si nécessaire.
Si vous devez conserver le fichier d'origine, vous devez d'abord le sauvegarder.
Remarque pour les utilisateurs Mac: La commande dos2unix
n'existe pas sous Mac OS X.
Découvrez cette réponse pour une variété de solutions utilisant différents outils.
Il existe également une commande unix2dos
qui effectue 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 le Bloc-notes et que toutes les lignes fonctionnent ensemble, essayez unix2dos filename
.
Supprimez le dernier caractère \r
qui a provoqué cette erreur:
sed -i 's/\r$//' filename
Explication:
L'option -i
est destinée à l'édition sur place , nous supprimons le \r
final directement dans le fichier d'entrée. Veillez donc à taper correctement le motif.
Pour WINDOWS utilisateurs avec Notepad ++ (coché avec la version 6.8.3), vous pouvez corriger le fichier en utilisant l'option - Modifier -> Conversion EOL -> Format Unix/OSX
Et sauvegardez votre fichier à nouveau.
Edit: fonctionne toujours dans la v7.5.1 (29 août 2017)
J'utilise cygwin et Windows7, l'astuce n'était PAS de mettre le set -o igncr
dans votre fichier .bashrc, mais de placer l'ensemble SHELLOPTS
dans vos variables d'environnement sous Windows. (Donc, rien avec Unix/Cygwin ...) Je pense que cela ne fonctionne pas à partir de .bashrc
parce que "les gouttes sont déjà aspirées" comme on dirait en allemand. ;-) Donc, mon SHELLOPTS
ressemble à ceci
braceexpand:emacs:hashall:histexpand:history:igncr:interactive-comments:monitor
Si vous utilisez un Cygwin récent (par exemple 1.7), vous pouvez également démarrer votre .bashrc
et .bash_profile
avec la ligne suivante, sur la première ligne non commentée:
# ~/.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
Ceci forcera bash à ignorer les caractères de retour chariot (\r
) utilisés dans les séparateurs de lignes Windows.
Voir http://cygwin.com/ml/cygwin-announce/2010-08/msg00015.html .
TEXT SUBLIME
Avec sublime vous allez juste à
Affichage -> fins de lignes -> (sélectionner) Unix
Puis enregistrez le fichier. Va résoudre ce problème.
Aussi simple que ça!
Vous pouvez également ajouter l’option -o igncr
à l’appel bash, par exemple.
bash -x -o igncr script.sh
L'erreur:
'\r'
: commande non trouvée
est causé par l’incapacité de Shell à reconnaître les fins de ligne CRLF de type Windows (0d 0a
) car il s’attend uniquement à LF
(0a
).
Si vous utilisez Git sous Windows, assurez-vous que vous avez sélectionné " Commander tel quel " lors de l'installation. Assurez-vous ensuite que vous exécutez: git config --global core.autocrlf false
, afin que Git n’effectue aucune conversion lors de l’extraction ou de la validation de fichiers texte.
dos2unix
Si vous n'utilisez pas Git, vous devez simplement reconvertir ces fichiers/scripts concernés en fins de ligne de type Unix, soit de l'une des manières suivantes:
dos2unix ~/.bashrc
Remarque: La commande dos2unix
fait partie du package dos2unix
.
tr
Si vous avez installé Vim, la commande suivante devrait corriger les fichiers:
ex +'bufdo! %! tr -d \\r' -scxa ~/.bash*
Alias utile: alias dos2unix="ex +'bufdo! %! tr -d \\\\r' -scxa"
.
tr
Voici la méthode en utilisant tr
:
cat ~/.bashrc | tr -d '\r' > ~/.bashrc.fixed && mv -v ~/.bashrc.fixed ~/.bashrc
ou:
tr -d '\r' < filename > new_filename
Remarque: le \r
est équivalent à \015
.
sed
Vous pouvez essayer la commande suivante:
sed -i'.bak' s/\r//g ~/.bash*
recode
Les alias suivants peuvent être utiles (pour remplacer la commande dos2unix
]:
alias unix2dos='recode lat1:ibmpc'
alias dos2unix='recode ibmpc:lat1'
Source: Outils Unix gratuits (ssh, bash, etc.) sous Windows .
Perl
La commande Perl
suivante peut convertir le fichier de DOS au format Unix:
Perl -p -i.bak -e 's/\015//g' ~/.bash*
Source: dépouillant le ^ M .
tofrodos
Sous Linux, comme Ubuntu, qui n’est pas fourni en standard avec dos2unix
ou unix2dos
, vous pouvez installer le package tofrodos
(Sudo apt-get install tofrodos
) et définir les alias suivants:
alias dos2unix=’fromdos’
alias unix2dos=’todos’
Ensuite, utilisez la même syntaxe que ci-dessus.
Si vous utilisez Vagrant VM et que cela se produise pour le script d'approvisionnement, essayez de définir l'option binary
sur 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
essayez d'exécuter la commande suivante
vim .bashrc
:set ff=unix
:wq!
Selon Gist , la solution consiste à créer un ~/.bash_profile
(dans le répertoire HOME
) contenant:
export SHELLOPTS
set -o igncr
les gens qui utilisent notepad ++ (6.8.1) pour expédier des scripts Shell de Windows à Linux.
définir les éléments suivants dans le Bloc-notes ++ Edition -> Conversion EOL -> Format Unix/OSX
Résolu avec Notepad ++:
1) Menu-> Edition-> Conversion EOL-> Format Unix/OSX
2) puis sauvegarder
Fixé
J'ai eu le même problème. Solution: J'édite le fichier avec l'éditeur pspad et lui donne un format unix (Menu - Format -> UNIX)
Je crois que vous pouvez définir ce format dans votre fichier avec de nombreux autres éditeurs.
Peut-être que vous avez utilisé notepad ++ pour créer/mettre à jour ce fichier.
EOL (Édition-> Conversion EOL) La conversion par défaut est Windows.
Changer la conversion EOL dans Notepad ++
Edit -> EOL Conversion -> Unix (LF)
Cela mettra à jour les nouveaux caractères du fichier pour qu'ils soient de style Unix. Plus d'infos sur "Newline Representation" à Emacs peuvent être trouvées ici:
http://ergoemacs.org/emacs/emacs_line_ending_char.html
Remarque: Les étapes ci-dessus peuvent être transformées en script Emacs si vous préférez l’exécuter à partir de la ligne de commande.
EditorConfig - est mon choix.
Cette réponse est pertinente pour mars 2018. À l'avenir, les données de cette réponse pourraient être obsolètes.
Auteur de cette réponse a personnellement utilisé EditorConfig à mars 2018.
Vous devez utiliser un des éditeurs/éditeurs pris en charge .
.editorconfig
_ une fois, où je crée mon projet, → je peux oublier des problèmes spécifiques à la plate-forme, au style et à l'IDE .J'installe le plugin EditorConfig pour Sublime Text → mon éditeur de texte. J'édite des fichiers en texte Sublime.
Par exemple, j'ai le fichier sashacrlf.sh
:
echo "Sasha" &
echo "Goddess!" &
Je lance 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 enregistrez un fichier portant l'extension .sh
dans votre projet dans votre éditeur, EditorConfig définit les fins de ligne UNIX pour ce fichier.
Je sauvegarde à nouveau sashacrlf.sh
dans mon éditeur de texte. Je lance à nouveau sashacrlf.sh
:
$ bash sashacrlf.sh
Sasha
Goddess!
Je ne peux pas obtenir de sortie inattendue dans la console.
Par exemple, je souhaite avoir des fins de ligne UNIX dans tous les fichiers portant les extensions .sh
, .bashrc
et .bash_profile
. J'ajoute ces lignes à mon fichier .editorconfig
:
[*.{sh,bashrc,bash_profile}]
end_of_line = lf
Maintenant, si j’enregistre un fichier avec l’extension .sh
, .bashrc
ou .bash_profile
, EditorConfig définit automatiquement la fin de la ligne UNIX pour ce fichier.
Dans EditPlus , vous le faites à partir du menu Document → File Format (CR/LF) → Change File Format...
, puis choisissez le bouton radio Unix / Mac OS X
.
Si le package vim est installé sur votre installation Cygwin, vous pouvez utiliser vim pour résoudre ce problème sans rechercher ni remplacer. Démarrez vim comme suit: vim filename.sh
(il est souvent associé à vi également). Ensuite, tapez :set fileformat=unix
, puis :wq
(write & quit) pour enregistrer vos modifications. (Le :
vous met en mode d'édition de vim.)
Je recommande ceci sur dos2unix car vim est probablement plus couramment installé.
Cependant, il est probablement recommandé de configurer votre éditeur de texte pour qu'il enregistre les fichiers que vous prévoyez d'utiliser dans un environnement Unix/Linux au format texte Unix. Les réponses données ci-dessus pour Notepad ++ sont un bon exemple.
Remarque supplémentaire: Si vous n'êtes pas sûr du type de fichier (DOS ou Unix), vous pouvez utiliser le file filename.sh
. Cela peut notamment aider au débogage de problèmes plus obscurs (tels que des problèmes de codage lors de l'importation de vidages SQL provenant de Windows).
Pour d'autres options sur la façon de modifier le formatage d'un fichier texte, voir cet article de la base de connaissances I
Vous trouverez plus d'informations de base sur les scripts Bash et les fins de ligne sur cette question de StackOverflow .
Ce problème est peut-être dû au fichier/script créé/téléchargé à partir d'un ordinateur Windows. S'il vous plaît essayez de convertir en format de fichier linux.
dos2unix ./script_name.sh
ou
dos2unix ~/.bashrc