12
votes

Commande non trouvée Message d'erreur lors de l'exécution d'un script

J'apprends comment faire des scripts Shell à UNIX, mais je continue à venir sur cette erreur stupide. Disons que je fais un script comme celui-ci:

./test: Command not found.


2 commentaires

Est-ce que ls / bin / sh montre un fichier avec le bit exécutable activé?


Lorsque vous ajoutez la barre oblique manquante, rencontrez-vous toujours le problème? Le répertoire est-il monté avec des options (très) particulières?


10 Réponses :


5
votes

On dirait que vous avez besoin d'une barre oblique avant la poubelle:

# tells you where sh resides, if it is on your path
$ which sh
/bin/sh

# tells you which shell you are currently using
$ echo $SHELL
/bin/tcsh


1 commentaires

Eh bien, je viens de remplacer l'en-tête avec ce que vous avez posté et que je reçois la même erreur.



0
votes

Le #! indique à UNIX d'exécuter 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 sur quel programme il ne peut pas trouver.


0 commentaires

12
votes

L'exécutable: xxx

et assurez-vous de sauvegarder votre fichier au format de fichier UNIX. Et: Vérifiez si votre partition est exécutable (montage).


0 commentaires

0
votes

Pour ajouter à la réponse de Martin, vous dites que vous enregistrez le fichier dans votre répertoire personnel et l'exécuter comme ./ test . Cela ne fonctionnera que si votre répertoire de travail actuel est identique à votre répertoire personnel.

L'astérisque à côté du nom du fichier signifie que le fichier est exécutable.


4 commentaires

Eh bien, je suis actuellement dans mon annuaire à domicile.


@Waffles: Si la réponse de Martin n'a pas aidé et que vous êtes dans le même répertoire où le fichier est situé ... Êtes-vous sûr de disposer de / bin / sh programme? Il peut être / bin / zsh ou '/ bin / bash` selon le système exactement de type UNIX que vous exécutez.


Tout ce qui peut raisonnablement être appelé Unix a une coquille Bourne ou Posix comme / bin / sh , même si la coque préférée est autre chose comme / bin / bash ou ou ou ou ou / bin / ksh .


@Gilles: Eh bien, à moins que vous ne soyez mal au système, que les gaufres peuvent faire sa question :)



2
votes

Quand ./ test est un script exécutable et pourtant l'exécuter, il donne le message d'erreur ./ test: commande non trouvée , vérifiez que l'interprète existe. Vous devez donner un chemin absolu (la variable d'environnement n'est pas utilisée).

Si le fichier est passé par une machine Windows, assurez-vous qu'il n'y a pas de retour de chariot parasite à la fin de la ligne, car CR ferait partie du nom du fichier d'interprétation. Vous pouvez vérifier avec : Si cela se termine par 0d 0a , il y a un CR et vous devez le supprimer (vous devrez peut-être supprimer CR des autres lignes).


0 commentaires

10
votes

C'est très étrange en effet. Les étapes que vous décrivez auraient dû travailler, il doit donc y avoir une petite erreur dans votre environnement ou l'exécution de ces étapes. Vous pouvez faire certaines choses pour aider à diagnostiquer ceci:

Vérification des caractères de contrôle P>

Ce que vous avez documenté a l'air bien, tant qu'il n'y a pas de fautes de frappe ni de caractères de contrôle. Vous devez vérifier en tapant: p> xxx pré>

si vous voyez un texte supplémentaire inattendu qui pourrait expliquer le problème. Par exemple, "^ m" à la fin d'une ligne indiquerait que votre éditeur enregistre le fichier au format Windows. P>

régénérer le fichier de manière fiable p>

pour créer un bien connu ./ Test2 code>, Copiez-coller les commandes ci-dessous: p> xxx pré>

vérifiant quelle commande ne peut pas être trouvée p>

si vous tapez. .. p> xxx pré>

... obtenez-vous exactement ... p> xxx pré>

... Comme vous l'avez décrit avec ./ test code>? Je viens de faire le nom Ajio afin que cela ne devrait pas exister. S'ils sont des messages correspondent, cela ne vous dit rien de nouveau. Mais si les messages diffèrent, cela confirme que ./ test code> a été au moins trouvé et exécutable. P>

Il est également possible que votre version de SH code> essaie Pour vous dire que Test code> ne peut pas être trouvé, mais lors de l'exécution de Test code> une commande que la coque a essayé de fonctionner est introuvable. Cela ne devrait pas être la commande ECHO, comme avec la plupart des implémentations shell qui seront une commande interne, implémentées à l'intérieur de la coquille. Mais, la coquille peut exécuter un script d'initialisation contenant une ligne spécifiant une commande qu'il ne peut pas exécuter. Si vous exécutez man sh code>, il vous indiquera à propos de tous les différents fichiers de démarrage que votre shell pourrait essayer d'exécuter. Celles-ci peuvent être différentes de celles utilisées lorsque vous démarrez la coquille de manière interactive. Mais, en tant que débutant, il peut être intimidant de vérifier la validité de ces scripts. Il est probable que toutes les fausses personnalisations soient dans votre processus de démarrage de shell personnel, et ne pas affliger l'ensemble de l'installation Linux, alors exécutez ls -ld ~ /.*4/ code> pour répertorier les fichiers cachés de votre répertoire personnel, et inspectez-vous qui ressemble à des fichiers de démarrage shell (par exemple, ~ / .BASHRC, ~ / .profile, ~ / .bash_login). Vérifiez toutes les commandes qu'ils spécifient peuvent être trouvées avec lesquelles et sont invoquées après que la variable de chemin est définie pour inclure leur emplacement. P>

comparer à une autre coque p>

s'il y a un problème avec le / BIN / SH Installation / Initialisation, vous pourriez peut-être le contourner en invoquant une autre coquille. Essayez ... P>

#!/bin/csh
echo HELLO


2 commentaires

Grand conseil. J'ai vérifié la page man, et je pense qu'il peut être raccourci Cat -T , qui est identique à ce que CAT -VT .


Utilisation de CAT -VT Pour détecter que mon fichier de script avait des terminaisons de ligne Windows incorrectes enregistrées le jour. Merci.



2
votes

J'ai eu le même problème où j'ai copié le fichier de Windows en Linux et j'ai essayé de l'exécuter. J'ai fait toutes les suggestions ci-dessus, mais rien n'aidé jusqu'à ce que je n'ai fait de Dos2unix sur le dossier et que cela a résolu. Ce n'est peut-être pas le cas pour vous, mais il suffit de le mettre là-bas


0 commentaires

1
votes

J'ai eu un problème similaire avec une ancienne machine virtuelle SCO openServer 5.0.7. M'a conduit noix que je ne pouvais pas courir certains scripts qui ont commencé avec

"#! / bin / bash"

(moins les citations, bien sûr) tout en lisant les discussions ici, il me leva pour vérifier si / bin / bash existait même. S'avère qu'il manquait. J'ai installé à partir d'un CD Skunkware2000 et tout allait bien.


0 commentaires

4
votes

Tout d'abord, vérifiez si / bin / sh est présent, sinon c'est votre problème.

Si vous avez installé / bin / sh installé, je pense que cela se produit si votre chemin n'est pas correctement configuré. Dans ce cas, vous pouvez essayer: / bin / sh test.sh dans le répertoire de travail actuel où le test.sh est situé.

Essayez également dos2unix test.sh si vous avez copié le fichier de Windows.


0 commentaires

0
votes

0 commentaires