Chaque fois que j'exécute un script à bash scriptname.sh
partir de la ligne de commande dans Debian, j'obtiens Command Not found
puis le résultat du script.
Le script fonctionne mais il y a toujours une Command Not Found
déclaration imprimée à l'écran pour chaque ligne vide. Chaque ligne vide entraîne une commande introuvable.
J'exécute le script à partir du /var
dossier.
Voici le script:
#!/bin/bash
echo Hello World
Je l'exécute en tapant ce qui suit:
bash testscript.sh
Pourquoi cela se produirait-il?
bash -x scriptname.sh
pour tracer l'erreur. - Dans mon cas, c'était un fichier sh enregistré sous Windows avec VSCode et des fins de ligne comme "CRLF". Dans VSCode dans le coin inférieur droit, vous pouvez changer la terminaison de ligne de "CRLF" à "LF". Téléchargé ce fichier et peut enfin l'exécuter avecbash scriptname.sh
.Réponses:
Assurez-vous que votre première ligne est:
Entrez votre chemin vers bash si ce n'est pas le cas
/bin/bash
Essayez de courir:
Cela convertira les fins de ligne, etc. de Windows au format Unix. c'est-à-dire qu'il supprime \ r (CR) des fins de ligne pour les changer de
\r\n (CR+LF)
à\n (LF)
.Plus de détails sur la
dos2unix
commande (page de manuel)Une autre façon de savoir si votre fichier est au format dos / Win:
La sortie ressemblera à ceci:
Cela produira le texte entier du fichier avec
<CR>
affiché pour chaque\r
caractère dans le fichier.la source
bash scriptname.sh
(mais c'est toujours une bonne pratique, bien sûr).Vous pouvez utiliser
bash -x scriptname.sh
pour le tracer.la source
J'ai également rencontré un problème similaire. Le problème semble être les autorisations. Si vous faites une
ls -l
, vous pourrez peut-être identifier que votre fichier n'a peut-être PAS le bit d'exécution activé. Cela ne permettra PAS au script de s'exécuter. :)Comme @artooro l'a ajouté dans le commentaire:
la source
chmod +x testscript.sh
Cela peut être trivial et sans rapport avec la question du PO, mais je me suis souvent trompé au début lorsque j'apprenais le script.
Cela produira une réponse «commande non trouvée». La bonne façon est d'éliminer les espaces
la source
Si le script fait (relativement) bien son travail, alors il fonctionne correctement. Votre problème est probablement une seule ligne dans le fichier référençant un programme qui n'est pas sur le chemin, non installé, mal orthographié ou quelque chose de similaire.
Une façon est de placer un
set -x
en haut de votre script ou de l'exécuter avecbash -x
au lieu de simplementbash
- cela affichera les lignes avant de les exécuter et vous avez généralement juste besoin de regarder la sortie de la commande immédiatement avant l'erreur pour voir ce qui cause le problèmeSi, comme vous le dites, ce sont les lignes vides à l' origine des problèmes, vous pouvez vérifier ce qui est actaully en eux. Courir:
et assurez-vous qu'il n'y a pas de caractères amusants "invisibles" comme le
CTRL-M
(retour chariot) que vous pouvez obtenir en utilisant un éditeur de type Windows.la source
Sur Bash pour Windows, j'ai mal essayé de s'exécuter
sans ./ au début et a obtenu la même erreur.
Pour les personnes ayant un arrière-plan Windows, la forme correcte semble redondante:
la source
utiliser
dos2unix
sur votre fichier de script.la source
Essayer
chmod u+x testscript.sh
Je le sais d'ici: http://www.linuxquestions.org/questions/red-hat-31/running-shell-script-command-not-found-202062/
la source
pour exécuter cela, vous devez fournir le chemin complet de celui-ci par exemple
la source
Si vous avez Notepad ++ et que vous obtenez ce message d'erreur .sh: "commande introuvable" ou ce message d'erreur autoconf "ligne 615: ../../autoconf/bin/autom4te: aucun fichier ou répertoire de ce type" .
Sur votre Notepad ++, allez dans Edit -> EOL Conversion puis cochez Macinthos (CR) . Cela modifiera vos fichiers. J'encourage également à vérifier tous les fichiers avec cette commande, car une telle erreur se produira bientôt.
la source
Avait le même problème. Malheureusement
alors je l'ai fait pour convertir.
puis
la source
Les problèmes liés à l'exécution des scripts peuvent également être liés à un mauvais formatage des commandes multilignes, par exemple si vous avez un espace après le saut de ligne "\". Par exemple ceci:
(veuillez noter que l'espace supplémentaire après "\") causera des problèmes, mais lorsque vous supprimez cet espace, il fonctionnera parfaitement.
la source
J'avais aussi quelques-uns des
Cannot execute command
. Tout semblait correct, mais en fait j'avais un espace insécable
juste avant ma commande qui était bien sûr impossible à repérer à l'œil nu:Ce qui, dans Vim, ressemblait à:
Ce n'est qu'après avoir exécuté le vérificateur de script Bash
shellcheck
que j'ai trouvé le problème.la source
shellcheck
est disponible en ligne, même si vous devez bien sûr copier et coller votre script exactement pour que cela vous aide. shellcheck.netJe suis tombé sur cela aujourd'hui, en copiant par inadvertance l'invite de commande dollar
$
(avant une chaîne de commande) dans le script.la source
Ajoutez le répertoire courant (.) À PATH pour pouvoir exécuter un script, en tapant simplement son nom, qui réside dans le répertoire courant:
la source
.
À VOTRE CHEMIN.Vous pouvez mettre à jour vos fichiers .bashrc et .bash_profile avec des alias pour reconnaître la commande que vous entrez.
Les fichiers .bashrc et .bash_profile sont des fichiers cachés probablement situés sur votre lecteur C: où vous enregistrez vos fichiers programme.
la source