-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..
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
Exécuter la commande suivante dans un terminal
sed -i -e 's/\r$//' scriptname.sh
puis essayer
./scriptname.sh
ça devrait marcher.
si vous utilisez texte Sublime sur Windows ou Mac pour modifier vos scripts:
Cliquez sur View > Line Endings > Unix
et enregistrer le fichier à nouveau.
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.
dans le bloc-notes++, vous pouvez le définir spécifiquement pour le fichier en appuyant sur
Edit -- > Conversion EOL -- > format UNIX / OSX
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
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
pour Eclipse utilisateurs, vous pouvez soit modifier le codage du fichier directement à partir du menu File > Convert Line Delimiters To > Unix (LF, \n, 0Α, ¶)
:
ou remplacer New text file line delimiter
par Other: Unix
sur Window > Preferences > General > Workspace
panneau:
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.
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
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.