Correction : erreur « Mauvais interprète : aucun fichier ou répertoire de ce type » sous Linux

Hannah Stryker / Geek pratique
Si vous obtenez une erreur « mauvais interpréteur : aucun fichier ou répertoire de ce type » lors de l’exécution d’un script shell, vous devez convertir votre fichier de script de Windows vers les fins de ligne Unix. Une méthode consiste à utiliser le dos2unix commande, comme ceci :

dos2unix script1.sh

Avez-vous essayé d’exécuter un script Bash et avez-vous reçu le message d’erreur « /bin/bash^M : mauvais interprète : aucun fichier ou répertoire de ce type » ? La sortie n’est pas très utile et donne presque l’impression que votre script est manquant. Heureusement, ce n’est pas le cas, et la solution est très simple.

Qu’est-ce que l’erreur « Mauvais interprète : aucun fichier ou répertoire de ce type » ?

Obtention d’un message d’erreur indiquant /bin/bash^M: bad interpreter: No such file or directory signifie simplement que votre fichier de script shell a les mauvaises fins de ligne – les caractères placés à la fin d’une ligne indiquant qu’il est temps de passer à la ligne suivante. Windows descendant sous DOS aime voir un terminateur « retour chariot et saut de ligne » (CRLF), noté rn. En revanche, Linux, macOS moderne et d’autres systèmes basés sur Unix utilisent uniquement le « saut de ligne » (LF), ou n.

Si vous voyez cette erreur de mauvais interpréteur, il y a de fortes chances que vous ou la personne à qui vous avez fourni le script l’ait initialement écrit sur un ordinateur Windows. Bash les voit rn fins de ligne définies par l’ordinateur Windows et s’énerve car elles empêchent le shell d’interpréter correctement votre script.

UN "mauvais interpréteur : aucun fichier ou répertoire de ce type" message d'erreur dans une ligne de commande Linux.

Vous pouvez même confirmer le problème dans un terminal Linux en pointant le file commande à votre script.

file script1.sh

Vérifiez les fins de ligne d'un fichier avec la commande file sous Linux.

Si le fichier utilise des fins de ligne DOS, vous verrez le message « avec des terminaisons de ligne CRLF » ajouté dans la sortie. Si notre script avait utilisé les nouvelles lignes Unix (LF) appropriées, il ne mentionnerait pas du tout les terminateurs. Heureusement, il est facile de se remettre dans les affaires de la FL.

Comment réparer une erreur « Mauvais interprète : aucun fichier ou répertoire de ce type »

Tout ce qu’il faut pour se débarrasser de ce message d’erreur et commencer à exécuter vos scripts normalement est de passer des fins de ligne DOS aux fins de ligne Unix. Vous pouvez le faire avec les commandes du terminal ou dans votre éditeur de code préféré. Voici huit façons de le réparer :

Utilisation de la commande dos2unix

Il existe un programme en ligne de commande conçu uniquement pour convertir des fichiers DOS (alias Windows) en fichiers entièrement compatibles Unix qui portent bien leur nom. dos2unix. Il est disponible dans la plupart des référentiels par défaut, vous pouvez donc l’installer sur Ubuntu avec :

sudo apt install dos2unix

Sur notre installation Fedora dos2unix est venu préinstallé, mais vous pouvez confirmer que vous l’avez avec:

sudo dnf install dos2unix

Sur Arch Linux :

sudo pacman -S dos2unix

En utilisant dos2unix est simple; Donnez-lui simplement votre nom de fichier.

dos2unix script1.sh

Entrez la commande dos2unix.

Vérifiez-le avec file si vous souhaitez confirmer que la conversion a réussi avant d’exécuter votre script. Vous pouvez également effectuer une conversion en masse en nommant plusieurs fichiers séparés par un espace uniquement.

dos2unix script1.sh script2.sh script3.sh

Ou, si vous avez des noms de fichiers cohérents, vous pouvez bien sûr écrire des commandes plus courtes en utilisant des caractères génériques.

dos2unix script*.sh

Utilisez un astérisque dans votre commande dos2unix pour convertir avec un caractère générique.

Le dos2unix La commande a plusieurs drapeaux pour vous aider à faire des types spéciaux de conversions, comme changer la propriété du fichier. Vous pouvez même l’utiliser à l’envers, unix2dos, si vous souhaitez revenir à CRLF. Entrer dos2unix --help pour apprendre plus.

Utilisation de la commande tr

Si vous ne pouvez pas ou ne voulez pas installer un utilitaire dédié, Linux dispose d’outils intégrés qui nettoieront ces nouvelles lignes. Avec le tr commande, vous pouvez supprimer la r une partie des fins de ligne donc il nous reste n terminateurs.

tr -d 'r' < script1.sh > script1_unix.sh

Ici, tr prend le texte de la script1.sh fichier, en supprimant chaque instance de r il trouve et enregistre la sortie en tant que fichier script1_unix.sh.

Utilisation de la commande sed

Le puissant sed La commande intégrée à votre shell peut également modifier les fins de ligne de votre fichier.

sed -i 's/r//' script1.sh

Si vous n’êtes pas familier avec sed syntaxe, nous disons sed pour éditer notre fichier (-i) et remplacer (s/) chaque retour chariot (r) avec rien. Cela nous laisse avec la préférence d’Unix n terminaisons de ligne.

Utiliser vi ou vim

Si vous utilisez vi ou vim pour éditer vos scripts, passez simplement cette commande pour convertir le fichier actuellement ouvert en fins de ligne Unix.

:set fileformat=unix

Modifiez le format du fichier de script avec une commande vim.

EN RAPPORT: Comment quitter l’éditeur Vi ou Vim

Utilisation de Geany

Si vous travaillez dans un environnement de bureau, il n’y a aucune raison de s’amuser dans le terminal juste pour préparer vos fichiers pour le monde Unix. Pratiquement tous les éditeurs de code et IDE ont une bascule pour les fins de ligne. Cela inclut Geany.

Pour convertir les fins de ligne dans Geany, accédez à Document> Définir les fins de ligne> Convertir et définir en LF (Unix).

Dans Geany, sous le menu Document, accédez à "Définir les fins de ligne" et choisissez "Convertir et définir en LF (Unix)".

Enregistrez votre script et essayez de l’exécuter à nouveau.

Utiliser Kate ou Kwrite

Si vous utilisez Kwrite pour éditer votre script, ou Kate, la cousine plus puissante de Kwrite, vous pouvez convertir au format LF en cliquant sur Outils > Fin de ligne > Unix.

Dans Kwrite, dans le menu Outils ouvrez "Fin de ligne" et sélectionnez "Unix."

Enregistrez le fichier et exécutez à nouveau votre script.

Utilisation du Bloc-notes++

Si vous modifiez du code dans Notepad++, vous pouvez également convertir facilement les fins de ligne, ce qui est pratique car vous l’exécutez probablement sous Windows (sauf si vous avez installé Notepad++ pour Linux) et pouvez les convertir avant de passer à votre système Linux. Avec le fichier ouvert, allez dans Edition > Conversion EOL > Unix (LF).

Assurez-vous de sauvegarder votre script avant de l’exécuter.

Si vous souhaitez que Notepad ++ crée des fichiers avec des fins de ligne Unix par défaut, accédez à Paramètres> Préférences, sélectionnez l’onglet « Nouveau document » et sous les options « Format (fin de ligne) », cliquez sur le bouton radio « Unix (LF) ».

Utilisation du code VS

Visual Studio Code (VS Code) fonctionne à peu près de la même manière, seule la bascule est encore plus facile à trouver. Cliquez simplement sur « CRLF » dans le coin inférieur droit de la fenêtre de VS Code.

Vous pouvez également configurer VS Code pour qu’il utilise les fins de ligne Unix par défaut en accédant à Fichier> Préférences> Paramètres et en tapant eol dans la barre de recherche des paramètres. Le résultat supérieur devrait être un menu déroulant pour définir le « Eol ». Changez-le en « n ».

Dans les paramètres VS Code, modifiez le paramètre EOL par défaut sur "n".

EN RAPPORT: Comment rendre vos scripts Bash compatibles avec le matériel

Source-135