web-dev-qa-db-fra.com

Comment résoudre "mauvais interprète: Aucun fichier ou répertoire de ce type"

J'essaie d'exécuter un script sh et d'obtenir l'erreur suivante sur Mac:

/usr/bin/Perl^M: bad interpreter: No such file or directory

Comment puis-je réparer cela?

35
Elad Benda

Retirer ^M caractères de contrôle avec

Perl -i -pe 'y|\r||d' script.pl
69
Сухой27

/ usr/bin/Perl ^ M:

Retirer le ^M au bout du usr/bin/Perl du #! ligne au début du script. C’est un caractère fallacieux ASCII 13) qui rend le shell fou.

Si vous ne voyez pas le caractère, vous devrez peut-être inspecter le fichier avec un éditeur binaire.

Vous pouvez faire comme ceci pour convertir le fichier au format de fin de ligne Mac:

$ vi your_script.sh

une fois dans le type vi:

 :set ff=unix

 :x
45
sergio

Le problème est que vous essayez d'utiliser le format de texte DOS/Windows sur un ordinateur Linux/Unix/OSX.

Dans les fichiers texte DOS/Windows, un saut de ligne, également appelé nouvelle ligne, est une combinaison de deux caractères: un retour à la ligne (CR) suivi d'un saut de ligne (LF). Dans les fichiers texte Unix, un saut de ligne est constitué d'un seul caractère: le saut de ligne (LF).

Dos2unix peut convertir pour vous l'encodage de fichiers, par exemple:

dos2unix yourfile yourfile

Pour obtenir de l'aide, lancez: man dos2unix.

6
kenorb

Vous semblez avoir des fins de lignes étranges dans votre script: ^M Est un retour chariot \r. Transformez votre script en fins de ligne Unix (juste \n Au lieu de \r\n, Qui est la ligne se terminant sur les systèmes Windows).

5
amon

Et si vous préférez Sublime Text - allez simplement dans Affichage -> Terminaisons de lignes et vérifiez Unix.

2
vahotm

Une approche alternative:

Sudo ln -s /usr/bin/Perl /usr/local/bin/Perl`echo -e '\r'`
2
ysth