«Commande introuvable» lors de l'exécution d'un script shell. Qu'est-ce que j'ai cassé?

8

Je suis sur OSX Snow Leopard.

Voici le contenu complet de grr.sh:

#!/bin/sh

echo wow

Lorsque j'essaie de l'exécuter à partir du terminal:

$ grr.sh
-bash: grr.sh: command not found
$ /bin/sh grr.sh
wow
$ sh grr.sh
wow
$ bash grr.sh
wow

D'accord. C'est suffisant. Je vais lui donner une autorisation exécutable, puis réessayer:

$ chmod +x grr.sh
$ grr.sh
-bash: grr.sh: command not found
$ chmod 755 grr.sh
$ grr.sh
-bash: grr.sh: command not found

Hmmm. Peut-être que cela fonctionnera si j'utilise bash explicitement? Je changerai le contenu du fichier en:

#!/bin/bash

echo wow

Et j'obtiens exactement les mêmes résultats. Que pouvais-je avoir cassé?!

Une dernière chose! Au cas où vous seriez curieux ...

$ which sh
/bin/sh
Fermeture Cowboy
la source

Réponses:

19

Absolument rien. Seuls les exécutables de l'un des répertoires de $PATHpeuvent être exécutés directement et ne .sont (généralement) jamais présents $PATH. Spécifiez le chemin d'accès à l'exécutable, c'est-à-dire ./grr.sh.

Ignacio Vazquez-Abrams
la source
3
+1. Il convient également de noter que le répertoire actuel se trouve sur le chemin d'accès par défaut sur les systèmes Windows et est prioritaire. Cette différence cruciale est probablement à l'origine de la confusion du demandeur.
afrazier
Vous étiez premier de 9 secondes! Je vous remercie!
Fermeture Cowboy
Vous enregistrez mon macbook
vietnguyen09
7

L'emplacement de grr.sh est-il dans la $PATHvariable? Sinon, vous devrez saisir:

./grr.sh

si vous êtes dans le même dossier que grr.sh. Sinon, fournissez-lui le chemin d'accès complet.

Cam Jackson
la source
6

les autorisations pour le fichier sont incorrectes. Essayez les commandes suivantes:

  $ chmod 777 file.sh
  $ ./file.sh
trémie
la source
0

Oui, et ce que signifie ./grr.sh, c'est que dans ce répertoire, exécutez la commande grr.sh. Le seul . signifie dans le répertoire de travail. Sinon, votre shell suppose que vous essayez d'exécuter une commande dans votre $ PATH.

Nathan
la source