„Polecenie nie znaleziono” podczas uruchamiania skryptu powłoki. Co złamałem?

8

Jestem na OSX Snow Leopard.

Oto pełna treść grr.sh:

#!/bin/sh

echo wow

Kiedy próbuję uruchomić go z terminala:

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

W porządku. Słusznie. Daję mu uprawnienia do wykonywania, a następnie spróbuj ponownie:

$ 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. Może zadziała, jeśli użyję basha jawnie? Zmienię zawartość pliku na:

#!/bin/bash

echo wow

I otrzymuję dokładnie takie same wyniki. Co mogłem złamać ?!

Ostatnia rzecz! Jeśli jesteś ciekawy ...

$ which sh
/bin/sh
Zamknięcie Cowboy
źródło

Odpowiedzi:

19

Absolutnie niczego. Tylko pliki wykonywalne w jednym z katalogów w $PATHmogą być uruchamiane bezpośrednio i .(zwykle) nigdy nie są uruchamiane $PATH. Podaj ścieżkę do pliku wykonywalnego, tj ./grr.sh.

Ignacio Vazquez-Abrams
źródło
3
+1. Warto również zauważyć, że bieżący katalog domyślnie znajduje się na ścieżce w systemach Windows i ma najwyższy priorytet. Ta zasadnicza różnica jest prawdopodobnie przyczyną zamieszania pytającego.
afrazier
Byłeś pierwszy o 9 sekund! Dziękuję Ci!
Zamknięcie Cowboy
Zapisujesz mojego
macbooka
8

Czy lokalizacja grr.sh w $PATHzmiennej? Jeśli nie, musisz wprowadzić:

./grr.sh

jeśli jesteś w tym samym folderze co grr.sh. Jeśli nie, podaj pełną ścieżkę do niego.

Cam Jackson
źródło
7

uprawnienia do pliku są nieprawidłowe. Wypróbuj następujące polecenia:

  $ chmod 777 file.sh
  $ ./file.sh
zbiornik
źródło
0

Tak, a co oznacza ./grr.sh, oznacza to, że w tym katalogu uruchom polecenie grr.sh. Pojedynczy . oznacza w katalogu roboczym. W przeciwnym razie twoja powłoka zakłada, że ​​próbujesz uruchomić polecenie w $ PATH.

Nathan
źródło