web-dev-qa-db-fra.com

Script Bash et / bin / bash ^ M: interpréteur incorrect: aucun fichier ni répertoire de ce type

J'apprends grâce à ce tutoriel à apprendre scripts bash à automatiser quelques tâches pour moi. Je me connecte à un serveur à l'aide de PuTTY.

Le script, situé dans .../Documents/LOG, est le suivant:

#!/bin/bash
# My first script
echo "Hello World!"

Et j'ai exécuté ce qui suit pour les autorisations de lecture/écriture/exécution

chmod 755 my_script

Ensuite, lorsque je saisis ./my_script, le message d'erreur indiqué dans le titre s'affiche.

Certaines questions similaires voulaient voir cela, alors je pense qu'elles pourraient aider:

which bash

/ bin/bash

et

echo $PATH

/ usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/jeux:/usr/bin/mh

J'ai essayé d'ajouter le répertoire courant à PATH, mais ça ne marche pas.

372
cartonn

J'ai constaté ce problème lors de la création de scripts dans Windows env, puis du portage sur un environnement Unix.

Essayez d’exécuter dos2unix sur le script:

http://dos2unix.sourceforge.net/

Ou alors, réécrivez simplement le script dans votre envoi Unix en utilisant vi et testez.

Unix utilise différentes fins de ligne, vous ne pouvez donc pas lire le fichier que vous avez créé sous Windows. Par conséquent, il considère ^ M comme un personnage illégal.

Si vous souhaitez écrire un fichier sous Windows puis le transférer, assurez-vous que votre éditeur est configuré pour créer des fichiers au format UNIX.

Dans le bloc-notes ++ en bas à droite de l'écran, il vous indique le format du document. Par défaut, il sera écrit Dos\Windows. Pour le changer, allez à

  • paramètres-> préférences
  • nouvel onglet document/répertoire par défaut
  • sélectionnez le format unix et fermez
  • créer un nouveau document
488
cowls

Exécuter la commande suivante dans le terminal

sed -i -e 's/\r$//' scriptname.sh

Alors essaye

./scriptname.sh

Ça devrait marcher.

421
Nivin V Joseph

Si vous utilisez Sublime Text sous Windows ou Mac pour modifier vos scripts:

Cliquez sur View > Line Endings > Unix et sauvegardez le fichier à nouveau.

enter image description here

116
Mario Campa

Cela est dû à l'édition de fichier dans Windows, à l'importation et à l'exécution sous Unix.

dos2unix -k -o filename devrait faire l'affaire.

44
StonecoldIM

Dans Notepad ++, vous pouvez le définir spécifiquement pour le fichier en appuyant sur

Édition -> Conversion EOL -> Format UNIX/OSX

enter image description here

33
Urik

le problème est avec la fin de la ligne dos. La suite le convertira en unix

dos2unix file_name

NB: vous devrez peut-être installer d’abord dos2unix avec yum install dos2unix

une autre façon de le faire consiste à utiliser la commande sed pour rechercher et remplacer les caractères de fin de ligne dos au format unix:

$sed -i -e 's/\r$//' your_script.sh
10
Md. Shafiqur Rahman

Votre fichier a des fins de ligne Windows, ce qui crée une confusion pour Linux.

Supprimez les caractères CR parasites. Vous pouvez le faire avec la commande suivante:

 $ sed -i -e 's/\r$//' setup.sh
8

J'ai pu résoudre le problème en ouvrant le script dans Gedit et en l'enregistrant avec l'option appropriée Line Ending:

Fichier> Enregistrer sous ...

En bas à gauche de l'invite Save As, vous trouverez des menus déroulants pour le codage de caractères et la fin de ligne. Changez la fin de ligne de Windows en Unix/Linux puis enregistrez.

gedit "Save As" Prompt]

4
NWRichmond

Pour les utilisateurs de Eclipse , vous pouvez modifier le codage du fichier directement à partir du menu File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶):

Eclipse change file encoding

Ou changez le New text file line delimiter en Other: Unix sur le panneau Window > Preferences > General > Workspace:

Eclipse workspace settings

4
Christos Lytras

Atom a un package de sélecteur de fin de ligne intégré

Plus de détails ici: https://github.com/atom/line-ending-selector

1
tuanh118