./ configure: / bin / sh^M: mauvais interpréteur [dupliquer]
cette question a déjà une réponse ici:
j'ai essayé d'installer lpng142 sur mon système fed 12. Semble être un problème pour moi. Je reçois cette erreur
[root@localhost lpng142]# ./configure
bash: ./configure: /bin/sh^M: bad interpreter: No such file or directory
[root@localhost lpng142]#
Comment faire - Je résoudre ce problème? Le fichier /etc/fstab
:
#
# /etc/fstab
# Created by anaconda on Wed May 26 18:12:05 2010
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/VolGroup-lv_root / ext4 defaults 1 1
UUID=ce67cf79-22c3-45d4-8374-bd0075617cc8 /boot ext4
defaults 1 2
/dev/mapper/VolGroup-lv_swap swap swap defaults 0 0
tmpfs /dev/shm tmpfs defaults 0 0
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
15 réponses
pour corriger, ouvrir votre script avec vi ou vim et entrer en mode commande vi (touche Esc ), tapez alors:
:set fileformat=unix
Enfin enregistrer
:x!
ou :wq!
ressemble à vous avez un fichier de fin de ligne dos. L'indice est le ^M
.
vous devez sauvegarder à nouveau le fichier en utilisant les terminaisons de ligne Unix.
vous pourriez avoir un utilitaire en ligne de commande dos2unix
qui le fera aussi pour vous.
Ou si vous voulez le faire avec un script:
sed -i 's/\r//' filename
votre fichier configure contient les fins de ligne CRLF (style windows) au lieu de simples fins de ligne LF (style unix). L'avez-vous transféré depuis Windows en mode FTP ASCII?
vous pouvez utiliser
dos2unix configure
pour fixer ceci, ou l'ouvrir dans vi et utiliser :%s/^M//g;
pour les remplacer tous (utilisez CTRL + V , Ctrl + M pour obtenir le ^M)
vous pouvez utiliser la commande suivante pour corriger
cat file_name.sh | tr -d '\r' > file_name.sh.new
si vous ne pouviez pas trouver exécuter la commande,
CentOS:
# yum install dos2unix*
# dos2unix filename.sh
dos2unix: converting file filename.sh to Unix format ...
Ubuntu/ Debian:
# apt-get install dos2unix
cela se produit généralement lorsque vous avez édité un fichier depuis Windows et que vous essayez maintenant d'exécuter ce fichier depuis une machine basée sur unix.
la solution présentée sur Linux Forum a fonctionné pour moi (plusieurs fois):
perl -i -pe's/\r$//;' <file name here>
Espérons que cette aide.
PS: vous devez avoir perl installé sur votre machine unix/linux.
si vous êtes sur OS X, vous pouvez modifier les fins de ligne dans XCode en ouvrant le fichier et en sélectionnant le
Affichage -> Texte -> Fin De Ligne -> Unix
menu item, puis Enregistrer. C'est pour le XCode 3.x. Probablement quelque chose de similaire dans le XCode 4.
suite au commentaire de Richard. Voici la façon simple de convertir votre fichier en fin de ligne UNIX. Si vous êtes comme moi, vous l'avez créé dans Windows Notepad et ensuite essayé de l'exécuter sous Linux - mauvaise idée.
- Téléchargez et installez vous une copie de Notepad++ (gratuit).
- ouvrez votre fichier script dans Notepad++.
- menu Fichier - > Enregistrer sous - >
- Enregistrer en tant que type:
Unix script file (*.sh;*.bsh)
- copiez la nouvelle .sh fichier à votre système Linux
- Maxe exécutable avec:
chmod 755 the_script_filename
- Run:
./the_script_filename
autres problèmes , essayez ce lien .
utilisez la commande dos2unix de linux pour convertir le fichier sauvegardé. exemple:
dos2unix file_name
grâce au commentaire de pwc101 sur ce post , cette commande a fonctionné sous Kali Linux .
sed -i s/{ctrl+v}{ctrl+m}// {filename}
assurez-vous de remplacer les bits entre parenthèses, {}
. C'est-à-dire: {ctrl+m}
signifie appuyer sur la touche Ctrl et sur la touche M .
vous pouvez aussi le faire dans Kate.
- ouvrir le fichier
- ouvrir le menu Outils
- étendre la fin de ligne sous-menu
- sélectionner UNIX
- enregistrer le fichier.
si vous utilisez TextMate ou un programme similaire, enregistrez sous, puis dans les encodages, choisissez LF
au lieu de CRLF
.
ajoute juste sh avant le nom du script pour que ça marche dans mon cas.
lorsque vous écrivez votre script sur windows et que vous voulez l'exécuter sur unix environnement, vous devez faire attention à l'encodage:
dos2unix $filePath