web-dev-qa-db-fra.com

sudo: ./abc.sh: commande non trouvée

Commandes tapées dans le terminal:

chmod 777 abc.sh
Sudo ./abc.sh

Chaque programme Shell donne la même erreur:

.sh: command not found

Incluant ce simple programme abc.sh:

#!/bin/bash
# My first script
echo "Hello World!"

Sortie de Sudo od -c ./abc.sh:

0000000 # ! / b i n / b a s h \n # M y
0000020 f i r s t s c r i p t \n \n e
0000040 c h o " H e l l o W o r l d
0000060 ! " \n \n
0000064

screenshot of terminal and abc.sh path(1)

screenshot of terminal and abc.sh path(2)

3
Nisheet Verma

Examinez le résultat de cette opération (à partir du répertoire où réside abc.sh):

$ type ./abc.sh
$ ./abc.sh

La commande type vérifie d'abord que votre fichier ./abc.sh est trouvé. Si ce n'est pas le cas, il se fermera en disant qu'il ne trouve pas le fichier ./abc.sh. Ensuite, nous devrons découvrir en quoi le nom de fichier ne peut pas être trouvé.

En outre, quel est le nom de l'éditeur que vous utilisez pour créer votre fichier de script. Si vous avez utilisé par inadvertance une édition de Windows (via wine), cela peut entraîner des problèmes avec les terminaisons de ligne de votre script.

Essayez d’utiliser et d’éditer comme nano ou gedit. Vous pouvez utiliser l'un de ces éditeurs recommandés et créer le même exemple de fichier que abc1.sh et vous assurer que les lignes sont exactement telles qu'elles se trouvent dans la question modifiée.


En passant, la seule façon pour moi de reproduire le message d'erreur que vous avez donné dans votre question est de laisser de côté la partie abc du fichier abc.sh.

Ces commandes produiront l'erreur de votre message:

$ ./.sh
$ Sudo .sh

N'oubliez pas que chaque erreur est unique et importante pour diagnostiquer le problème. Il est important de tester et d'exécuter le script et de donner le message d'erreur exact.

Par exemple, une erreur permission denied pourrait être provoquée par une tentative d'exécution d'un fichier dont le bit d'exécution n'est pas défini. Cela peut être défini en exécutant la commande à laquelle vous faites référence dans votre question:

$ chmod 777 abc.sh

Vous pouvez également obtenir l'erreur permission denied en essayant d'exécuter un fichier appartenant à root et pour lequel le bit de monde ou de groupe n'est pas défini pour la lecture. Cela peut être un effet secondaire de l’utilisation de Sudo dans votre espace personnel lorsque cela n’est pas nécessaire. Le chmod 777 que vous avez mentionné dans votre question permettrait également de résoudre ce problème en donnant des autorisations de lecture et d'exécution à tous les utilisateurs.

Si vous avez créé le fichier de manière à ce qu'il soit la propriété de root, vous devrez utiliser la commande elevated pour modifier les propriétés. Cela vous donnera accès à l'exécution du fichier:

$ Sudo chmod 777 abc.sh

Si vous avez une raison de contrôler qui peut exécuter ou accéder au script, vous pouvez jeter un coup d'œil aux autres options de chmod:

$ man chmod

Comme suggéré dans les commentaires de votre question, vous ne devez pas utiliser la commande élevée Sudo pour exécuter les scripts que vous testez. Si les tests se déroulent dans votre espace personnel, vous pouvez faire en sorte que certaines zones de votre espace personnel deviennent la propriété de root… en perdant l'accès personnel à ces zones. Certains scripts mal formés pourraient également endommager d'autres fichiers système de notre système d'exploitation. Le type de saisie incorrect de votre tentative d’exécution du script abc.sh indique que des erreurs peuvent survenir. Si vous décidez de supprimer votre script ou votre répertoire de travail de script et que vous disposez par erreur d'un espace au mauvais endroit, vous risquez de rencontrer de graves problèmes auxquels vous vous attendez le moins.

1
L. D. James

Eh bien, d'après ce que vous nous avez dit, cela devrait fonctionner parfaitement ... C'est-à-dire si la partition sur laquelle elle est stockée prend en charge les autorisations de style unix/posix. Je rencontre tout le temps cette erreur si j'essaie d'exécuter un script à partir d'une partition vfat ou ntfs. Considérant qu'il est monté à un emplacement appelé work, s'agit-il d'un lecteur USB avec une partition au format fat ou ntfs? Si c'est le cas, vous devez préfixer le shell avant le script. Vérifiez la partition, et cela pourrait être le problème. Déplacez-le dans votre répertoire personnel et il se peut qu'il s'exécute facilement sur un système de fichiers prenant en charge les autorisations unix/posix.

Vérifiez si c'est le cas:

mount |grep nisheet

Est-ce que vfat, fuseblock ou ntfs? Si c'est le cas...

Deux options:

  1. Préfixez le shell devant le script à exécuter:

bash abc.sh

  1. Déplacez-le vers un système de fichiers prenant en charge les autorisations Unix/Posix:

Ex:

mv abc.sh ~/
cd ~
chmod +x abc.sh
./abc.sh
3
darkdragn