"Befehl nicht gefunden" beim Ausführen eines Shell-Skripts. Was habe ich gebrochen?

8

Ich bin auf OSX Snow Leopard.

Hier ist der vollständige Inhalt von grr.sh:

#!/bin/sh

echo wow

Wenn ich versuche, es vom Terminal aus auszuführen:

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

Okay. Meinetwegen. Ich werde es ausführbare Erlaubnis geben, dann versuchen Sie es erneut:

$ 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. Vielleicht funktioniert es, wenn ich Bash explizit verwende? Ich werde den Inhalt der Datei ändern in:

#!/bin/bash

echo wow

Und ich bekomme genau die gleichen Ergebnisse. Was hätte ich kaputt machen können?!

Eine letzte Sache! Falls Sie neugierig sind ...

$ which sh
/bin/sh
Schließung Cowboy
quelle

Antworten:

19

Absolut gar nichts. Nur ausführbare Dateien in einem der Verzeichnisse in $PATHkönnen direkt ausgeführt werden und .sind (normalerweise) nie in $PATH. Geben Sie den Pfad zur ausführbaren Datei an, d ./grr.sh. H.

Ignacio Vazquez-Abrams
quelle
3
+1. Auch der Hinweis, das aktuelle Verzeichnis ist auf dem Weg auf Windows - Systemen standardmäßig und ist höchste Priorität. Dieser entscheidende Unterschied ist wahrscheinlich die Quelle der Verwirrung des Fragestellers.
Afrazier
Du warst mit 9 Sekunden der Erste! Vielen Dank!
Closure Cowboy
Sie speichern mein Macbook
vietnguyen09
7

Befindet sich die Position von grr.sh in der $PATHVariablen? Wenn nicht, müssen Sie Folgendes eingeben:

./grr.sh

Wenn Sie sich im selben Ordner wie grr.sh befinden. Wenn nicht, geben Sie den vollständigen Pfad dazu an.

Cam Jackson
quelle
6

Die Berechtigungen für die Datei sind falsch. Versuchen Sie die folgenden Befehle:

  $ chmod 777 file.sh
  $ ./file.sh
Trichter
quelle
0

Ja, und was ./grr.sh bedeutet, ist, dass Sie in diesem Verzeichnis den Befehl grr.sh ausführen. Der Single . bedeutet im Arbeitsverzeichnis. Andernfalls geht Ihre Shell davon aus, dass Sie versuchen, einen Befehl in Ihrem $ PATH auszuführen.

Nathan
quelle