Message d'erreur de commande non trouvé après avoir essayé d'exécuter un script UNIX
Je suis en train d'apprendre comment faire des scripts shell sous UNIX, mais je continue à venir à travers cette stupide erreur. Disons que je fais un script comme ceci:
#!/bin/sh
echo HELLO
J'ai enregistrer le fichier de test, et de faire la commande exécutable par moi avec chmod 700 test. J'ai enregistrer le fichier dans mon répertoire home, et (tenter de) l'exécution du fichier comme ceci:
./test
Uniquement sous UNIX de réponse:
./test: Command not found.
Ce qui se passe? Quand j'ai taper la commande ls-l, il y a un astérisque à côté du nom de fichier. Ce n'était pas là avant, j'ai utilisé la commande chmod. Quelqu'un peut me dire ce que je fais mal?
source d'informationauteur Waffles
Vous devez vous connecter pour publier un commentaire.
Le rendre exécutable:
et assurez-vous d'enregistrer votre fichier dans le format de fichier Unix. Et: vérifiez si votre partition est exécutable (le mont).
C'est très étrange en effet. Les étapes que vous décrivez doit avoir travaillé, donc il doit y avoir une petite erreur dans votre environnement ou de l'exécution de ces étapes. Il ya certaines choses que vous pouvez faire pour aider à diagnostiquer ce:
VÉRIFICATION POUR LES CARACTÈRES DE CONTRÔLE
Ce que vous avez documenté l'air bien, tant qu'il n'y a pas de fautes de frappe ou des caractères de contrôle. Vous devriez vérifier en tapant:
Si vous voyez tous les imprévus de texte supplémentaire qui pourrait expliquer le problème. Par exemple, "^M" à la fin d'une ligne pour indiquer que votre éditeur enregistré le fichier dans le format Windows.
RÉGÉNÉRER LE FICHIER DE MANIÈRE FIABLE
Pour créer un
./test2
copier-coller les commandes ci-dessous:VÉRIFICATION DE LA COMMANDE QUI NE PEUT ÊTRE TROUVÉ
Si vous tapez...
...ne vous obtenir exactement...
...comme vous l'avez décrit avec
./test
? Je trouve simplement que le nom ajio de sorte qu'il ne devrait pas exister. Si ils les messages de match, alors qu'il n'a pas vraiment vous dire quelque chose de nouveau. Mais si les messages diffèrent, ce qui confirme que./test
a au moins trouvé et exécutable.Il est également possible que votre version de
sh
est en train de dire vous pas quetest
ne peut pas être trouvé, mais que lors de l'exécution detest
une commande du shell essayé de l'exécuter ne pouvait pas être trouvé. Qui ne devrait pas être la commande echo, comme avec la plupart des shell implémentations qui sera une commande interne, mis en œuvre à l'intérieur de la coquille. Mais, la coque peut exécuter un script d'initialisation contenant une ligne de la spécification d'une commande, il ne peut pas s'exécuter. Si vous exécutezman sh
il vous dira tout sur tous les fichiers de démarrage de votre shell peut essayer de les exécuter. Ceux-ci peuvent être différentes de celles utilisées lorsque vous démarrez le shell de manière interactive. Mais, en tant que débutant, il peut être difficile de vérifier la validité de ces scripts. Il est probable que n'importe quel faux personnalisation serait à votre shell de démarrage du processus, et non pas d'affliger l'ensemble de l'installation de Linux, afin d'exécuterls -ld ~/.*
pour lister les fichiers cachés dans votre répertoire home, et d'inspecter tout ce que ressemblent les fichiers de démarrage du shell (par exemple ~/.bashrc, ~/.profile, ~/.bash_login). Vérifier toutes les commandes qu'ils précisent peut être trouvé avec qui, et sont appelés après que la variable de chemin d'accès est fixé à inclure leur emplacement.LE COMPARER À UN AUTRE SHELL
Si il y a un problème avec le /bin/sh installer /initialisation, alors vous pourriez être en mesure de le contourner en invoquant un autre shell. Essayez...
...et si un ou plusieurs de ces trouve un autre interpréteur de commandes, modifier ou recréer le fichier en précisant que shell, ala...
...puis
chmod +x
et./
. Si cela fonctionne, alors vous savez que votre problème est /bin/sh spécifiques.Il semble que vous ayez besoin d'un slash avant le bac:
Tout le reste semble bien... je suis en supposant que
/bin/sh
est l'emplacement de votre exécutable Bournse shell - si elle n'est pas, vous devez ajuster selon le cas. Sans le slash votre shell est à la recherche d'bin/sh
par rapport à votre répertoire courantplutôt que là où il est vraiment à la résidence.Vous aurez besoin pour localiser le fichier exécutable shell interprète que vous voulez (ou besoin) de vos scripts.
Un couple de plus de suggestions sur ma machine je obtenir ces résultats:
Je peux utiliser l'un ou l'autre comme le " shebang ligne en un simple script shell. Vous pouvez constater que votre Bourne shell est situé dans
/usr/bin
plutôt que/bin
par exemple.Tout d'abord, vérifiez si /bin/sh est présent, si non, alors c'est votre problème.
Si vous avez /bin/sh installé, alors je pense que ce qui se passe si votre chemin d'accès n'est pas correctement configuré.
Dans ce cas, vous pouvez essayer:
/bin/sh test.sh
à partir du répertoire de travail actuel où test.sh est situé.Aussi essayer
dos2unix test.sh
si vous avez copié le fichier à partir de windows.Quand
./test
est un script exécutable et pourtant, l'exécution, il donne le message d'erreur./test: Command not found
vérifiez que l'interprète existe. Vous devez donner un chemin absolu (lePATH
variable d'environnement n'est pas utilisé).Si le fichier a traversé une machine Windows, assurez-vous il n'y a pas une fausse retour chariot à la fin de la ligne, CR serait une partie de l'interprète de nom de fichier. Vous pouvez vérifier avec
<test head -n 1 | od -t x1
: si cela se termine avec0d 0a
il y a une CR et vous avez besoin de l'enlever (vous devrez peut-être supprimer les CR des autres lignes).J'ai eu le même problème lorsque j'ai copié le fichier à partir de Windows à Linux et a essayé de l'exécuter. J'ai fait toutes les suggestions ci-dessus, mais rien jusqu'à ce que j'ai fait un dos2unix sur le fichier et qu'il fixe. Il peut ne pas être le cas pour vous, mais il suffit de le mettre là
J'ai eu un problème similaire avec un vieux SCO OpenServer 5.0.7 de la machine virtuelle. M'ont rendu fou que je ne pouvais pas exécuter certains scripts qui a commencé avec
"#!/bin/bash"
(sans les guillemets, bien sûr), Tout en lisant les discussions ici, il m'est apparu pour vérifier si /bin/bash même existé. Il s'avère que c'était manquant. Je l'ai installé à partir d'un SKUNKWARE2000 CD et tout allait bien.
La
#!
dit Unix pour l'exécution de votre script à l'aide du programme spécifié. Dans votre cas vous avez spécifiébin/sh
mais il devrait être/bin/sh
. Le message d'erreur que Unix donne n'est pas particulièrement clair que le programme ne peut pas trouver.À ajouter à Martin réponse, vous dites que vous enregistrez le fichier dans votre répertoire personnel et de l'exécuter en tant que
./test
. Cela ne fonctionnera que si votre répertoire de travail actuel est le même que celui de votre répertoire d'accueil.L'astérisque à côté du nom de fichier signifie que le fichier est exécutable.
essayer
chmod u+x ./test
Je sais que d'ici: http://www.linuxquestions.org/questions/red-hat-31/running-shell-script-command-not-found-202062/