J'ai créé un script bash mais quand j'essaye de l'exécuter, je reçois
#!/bin/bash no such file or directory
Je dois exécuter la commande: bash script.sh
pour que cela fonctionne.
Comment puis-je réparer cela?
bash
shell-script
executable
shebang
Nicolas de Fontenay
la source
la source
#!/usr/bin/env bash
au lieu de#!/bin/bash
et également en regardant ici ...Réponses:
Ce type de message est généralement dû à une fausse ligne shebang, à un retour de chariot supplémentaire à la fin de la première ligne ou à une nomenclature au début de celle-ci.
Courir:
et voir comment ça se termine.
C'est faux:
C'est faux aussi:
C'est correct:
Utilisez
dos2unix
(oused
,tr
,awk
,perl
,python
...) pour corriger votre script si tel est le problème.En voici un qui supprimera à la fois une CR et une liste de contrôle:
Notez que le shell que vous utilisez pour exécuter le script affectera légèrement les messages d'erreur affichés.
Voici trois scripts montrant simplement leur nom (
echo $0
) et comportant les lignes shebang respectives suivantes:correctScript:
scriptWithBom:
scriptWithCRLF:
Sous bash, leur exécution montrera ces messages:
Exécuter les faux en appelant explicitement l'interpréteur permet au script CRLF de s'exécuter sans problème:
Voici le comportement observé sous
ksh
:et sous
dash
:la source
hexdump -C yourscript | head -n 1
. Je voudrais toujours utiliserdos2unix yourscript
pour le réparer.#!/bin/bash no such file or directory
message d'erreur ne s'afficherait, car rien n'empêche que quelque chose tente de s'exécuter ou de s'ouvrir#!/bin/bash
. C'est/bin/bash<CR>
ce qui serait exécuté.dos2unix
supprime également une nomenclature UTF-8. Une nomenclature UTF-8 aurait pu expliquer le message d'erreur.Cela peut également être causé par une nomenclature dans un script UTF-8. Si vous créez le script sous Windows, vous rencontrez parfois des problèmes au début du fichier.
la source
En réalité, le bon message pour le script bash est le suivant:
Parce que, dans freeBSD, bash est situé dans
/usr/local/bin/bash
la source
Vous pouvez utiliser vi pour résoudre les deux problèmes s’ils existent:
la source
Si vous n’avez pas dos2unix, c’est un moyen de résoudre ce problème.
la source
Marque d'ordre d'octet (BOM)
Cela pourrait être causé par une nomenclature. Sur Wikipedia, une nomenclature est une
Malheureusement, cela ne signale rien au noyau Linux qui gère la ligne she-bang. Vous pouvez vérifier que vous avez une nomenclature en utilisant
file
,Ou vous pouvez hexdump les premiers caractères et voir s'ils correspondent manuellement aux caractères de la nomenclature
Vous pouvez supprimer les caractères de nomenclature une fois que vous les connaissez comme ceci,
la source
J'ai eu le problème en ajoutant accidentellement un exécutable bash incorrect à la
PATH
et parce que dans mon script, le#!/usr/bin/env bash
shebang plus souple était utilisé (prenez le premier exécutable bash du chemin).J'ai installé GIT pour Windows pour fonctionner
cygwin
avec les interfaces graphiques Windows GIT (ne fonctionnait pas avec cygwin native git ...). J'ai résolu ce problème maintenant en passant à#!/bin/bash
sheband et en supprimant GIT pour WindowsPATH
.la source
Essayer
#!/bin/bash
Deuxième chose:
find / -name bash
Troisième chose:
ls -al /bin/bash
la source
which bash
. Nous savons qu'il en trouve un parce qu'il fonctionne avecbash script.sh
.