-bash.:/mon script: /bin/bash^M: mauvais interpréteur: Aucun fichier ou répertoire [dupliquer]

cette question a déjà une réponse ici:

  • les scripts shell sont-ils sensibles à l'encodage et aux fins de ligne? 2 réponses

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

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

#!/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

puis, quand j'entre ./my_script , je reçois l'erreur indiquée dans le titre.

certaines questions similaires voulaient voir ceux - ci, donc je pense qu'ils pourraient aider:

which bash

/ bin /bash

et

echo $PATH

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/bin/mh

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

276
demandé sur Benjamin W. 2013-01-08 20:03:35

11 réponses

j'ai vu ce problème lors de la création de scripts dans Windows env et du portage sur un environnement Unix.

Essayez d'exécuter dos2unix sur le script:

http://dos2unix.sourceforge.net /

ou réécrivez simplement le script dans votre environnement Unix en utilisant vi et testez.

Unix utilise des fins de ligne différentes donc ne peut pas lire le fichier que vous avez créé sur Windows. Par conséquent, il est de voir ^M comme un personnage illégal.

si vous voulez écrire un fichier sur Windows puis le portage, assurez-vous que votre éditeur est défini pour créer des fichiers au format UNIX.

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

  • Paramètres - > Préférences
  • nouveau document / répertoire par défaut de l'onglet
  • sélectionnez le format unix et fermez
  • créer un nouveau document
364
répondu cowls 2018-10-04 09:09:41

Exécuter la commande suivante dans un terminal

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

puis essayer

./scriptname.sh

ça devrait marcher.

309
répondu Nivin V Joseph 2017-10-18 10:29:09

si vous utilisez texte Sublime sur Windows ou Mac pour modifier vos scripts:

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

enter image description here

102
répondu Mario Campa 2016-09-15 13:37:14

cela est causé par l'édition de fichier dans windows et l'importation et l'exécution dans unix.

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

42
répondu StonecoldIM 2013-08-13 11:17:13

dans le bloc-notes++, vous pouvez le définir spécifiquement pour le fichier en appuyant sur

Edit -- > Conversion EOL -- > format UNIX / OSX

enter image description here

26
répondu Urik 2014-06-25 07:35:04

problème avec fin de ligne dos. Le suivant le convertira pour unix

dos2unix file_name

NB: vous devrez peut-être installer dos2unix en premier avec yum install dos2unix

une autre façon de le faire est d'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
8
répondu Md. Shafiqur Rahman 2016-09-29 05:43:24

votre fichier a les fins de ligne de Windows, ce qui prête à confusion avec Linux.

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

 $ sed -i -e 's/\r$//' setup.sh
6
répondu kalyani chaudhari 2016-05-19 10:16:14

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

Eclipse change file encoding

ou remplacer New text file line delimiter par Other: Unix sur Window > Preferences > General > Workspace panneau:

Eclipse workspace settings

3
répondu Christos Lytras 2017-05-01 09:21:47

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

Fichier > Enregistrer Sous...

en bas à gauche de l'invite Save As , il y a des menus déroulants pour L'encodage des caractères et la fin de ligne. Changez la fin de ligne de Windows en Unix/Linux puis sauvegardez.

gedit "Save As" prompt]

3
répondu NWRichmond 2017-10-25 09:18:23

Atome " est doté d'un sélecteur de fin de ligne d'emballage

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

1
répondu tuanh118 2017-06-15 20:52:09

je développe sur Windows et Mac / Linux en même temps et j'évite cette erreur ^M en exécutant simplement mes scripts comme je le fais sous Windows:

$ php ./my_script

Pas besoin de changer les fins de ligne.

-1
répondu MrMacvos 2016-11-04 17:32:22