Podczas wykonywania skryptu ze ścieżki (nazwa skryptu, a nie „nazwa skryptu”) pojawia się następujący błąd:
-bash: ./gitup: / bin / bash /: bad interpreter: nie katalog
Wszystkie pozostałe skrypty w tym samym katalogu są wykonywane bez problemu i nie napotykam tego problemu, gdy skrypt jest uruchamiany ręcznie (sh scriptname), tylko gdy jest wykonywany samodzielnie. Zatem sam skrypt wydaje się nie być problemem, ponieważ wykonuje się normalnie i robił to, dopóki nie otworzyłem nowej sesji powłoki i nie natrafiłem na ten błąd tylko dla tego skryptu.
Skrypt jest wykonywalny, zawiera wszystkie wymagane linie do wykonania w sposób opisany przeze mnie (działał poprawnie do dzisiaj) i może zostać wykonany przez mojego użytkownika, więc nie jestem pewien, na czym polega problem.
Linia shebang brzmi #! / Bin / bash. Użyłem polecenia „export PATH = $ PATH: repo / utilities „skierować do katalogu przechowującego te skrypty, z których wszystkie, oprócz tego, wykonują po prostu wywołując nazwę skryptu (np. gitup).
źródło
./gitup
. Czy na pewno uruchamiasz skrypt, który Twoim zdaniem jest?Odpowiedzi:
Jest kilka rzeczy, o których mogę pomyśleć.
Powiedziałeś, że twój skrypt znajduje się w twojej $ PATH, ale nazywasz go pełną ścieżką (
./gitup
w przeciwieństwie do sprawiedliwegogitup
). Czy to możliwe, że edytowałeś jedną wersję skryptu (powiedzmy w twoim $ PATH~/bin/gitup
), a następnie wykonałem inny (./gitup
)?Czy w twoim pliku PATH $ może być wiele wersji? Możesz to sprawdzić
Być może podczas edycji skryptu przypadkowo wprowadziłeś dziwny niewidzialny znak. Sprawdź za pomocą linii shebang
od
:Upewnij się, że nic nie ma
#!/bin/bash
ale znak nowej linii (\n
). To powinno wyglądać tak:źródło
Sprawdź shebang (
#!
) linia, upewnij się, że to mówii nie
Jeśli wygląda na drugi przykład, zmień go na pierwszy.
EDYTOWAĆ (w odpowiedzi na to komentarz)
Jeśli jest to ograniczone tylko do jednego skryptu, utwórz kopię tego skryptu i zacznij usuwać z niego kod, a następnie utwórz minimalny skrypt, który nadal pokazuje ten problem. Następnie dodaj ten minimalny skrypt.
źródło
/bin/bash
dowiązanie symboliczne do/bin/bash/
? Robi/bin/bash
istnieć? Czy twój system jest aktualny (dziwny błąd)?