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?
Retirer ^M
caractères de contrôle avec
Perl -i -pe 'y|\r||d' script.pl
/ 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
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
.
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).
Et si vous préférez Sublime Text - allez simplement dans Affichage -> Terminaisons de lignes et vérifiez Unix.
Une approche alternative:
Sudo ln -s /usr/bin/Perl /usr/local/bin/Perl`echo -e '\r'`