Za każdym razem, gdy uruchamiam skrypt przy użyciu bash scriptname.sh
wiersza poleceń w Debianie, otrzymuję Command Not found
wynik skryptu.
Skrypt działa, ale Command Not Found
na ekranie zawsze jest wypisywana instrukcja dla każdego pustego wiersza. Każda pusta linia powoduje, że polecenie nie zostało znalezione.
Uruchamiam skrypt z /var
folderu.
Oto skrypt:
#!/bin/bash
echo Hello World
Uruchamiam go, wpisując:
bash testscript.sh
Dlaczego tak się stało?
bash -x scriptname.sh
do śledzenia błędu. - W moim przypadku był to plik sh zapisany pod Windows z VSCode i zakończeniami linii jako "CRLF". W VSCode w prawym dolnym rogu można zmienić terminator linii z „CRLF” na „LF”. Przesłałem ten plik i mogłem go ostatecznie uruchomić zbash scriptname.sh
.Odpowiedzi:
Upewnij się, że pierwsza linia to:
Podaj swoją ścieżkę do uderzenia, jeśli tak nie jest
/bin/bash
Spróbuj biegać:
To spowoduje konwersję końcówek linii itp. Z formatu Windows do formatu uniksowego. tj. usuwa \ r (CR) z końców linii, aby zmienić je z
\r\n (CR+LF)
na\n (LF)
.Więcej szczegółów na temat
dos2unix
polecenia (strona podręcznika )Inny sposób sprawdzenia, czy plik jest w formacie dos / Win:
Wynik będzie wyglądał mniej więcej tak:
Spowoduje to wyświetlenie całego tekstu pliku z
<CR>
wyświetleniem dla każdego\r
znaku w pliku.źródło
bash scriptname.sh
(ale nadal jest to dobra praktyka).Możesz użyć
bash -x scriptname.sh
do śledzenia.źródło
Natknąłem się też na podobny problem. Wydaje się, że problemem są uprawnienia. Jeśli to zrobisz
ls -l
, możesz być w stanie zidentyfikować, że twój plik NIE ma włączonego bitu wykonania. To NIE pozwoli na wykonanie skryptu. :)Jak dodał @artooro w komentarzu:
źródło
chmod +x testscript.sh
To może być trywialne i niezwiązane z pytaniem OP, ale często myliłem się na początku, kiedy uczyłem się pisania skryptów
Spowoduje to wyświetlenie odpowiedzi „nie znaleziono polecenia”. Prawidłowym sposobem jest wyeliminowanie przestrzeni
źródło
Jeśli skrypt wykonuje swoje zadanie (względnie) dobrze, to działa poprawnie. Twoim problemem jest prawdopodobnie pojedyncza linia w pliku odwołująca się do programu, którego nie ma w ścieżce, nie jest zainstalowany, ma błędną pisownię lub coś podobnego.
Jednym ze sposobów jest umieszczenie
set -x
na górze skryptu lub uruchomienie go za pomocąbash -x
zamiast tylkobash
- spowoduje to wyświetlenie wierszy przed ich wykonaniem i zwykle wystarczy spojrzeć na dane wyjściowe polecenia bezpośrednio przed błędem, aby zobaczyć, co powoduje problemJeśli, jak mówisz, to puste wiersze powodują problemy, możesz sprawdzić, co się w nich dzieje . Biegać:
i upewnij się, że nie ma „niewidzialnych” zabawnych znaków, takich jak
CTRL-M
(powrót karetki), które można uzyskać za pomocą edytora systemu Windows.źródło
W Bash dla Windows próbowałem niepoprawnie uruchomić
bez ./ na początku i otrzymałem ten sam błąd.
Dla osób z tłem Windows poprawny formularz wygląda na zbędny:
źródło
użyj
dos2unix
w swoim pliku skryptu.źródło
Próbować
chmod u+x testscript.sh
Wiem to stąd: http://www.linuxquestions.org/questions/red-hat-31/running-shell-script-command-not-found-202062/
źródło
aby wykonać, musisz podać na przykład pełną ścieżkę do tego
źródło
Jeśli masz Notepad ++ i otrzymujesz ten komunikat o błędzie .sh: "polecenie nie znaleziono" lub ten komunikat o błędzie autoconf "wiersz 615: ../../autoconf/bin/autom4te: Nie ma takiego pliku lub katalogu" .
Na swoim Notepad ++ przejdź do Edycja -> Konwersja EOL, a następnie sprawdź Macinthos (CR) . Spowoduje to edycję plików. Zachęcam też do sprawdzania wszystkich plików tym poleceniem, bo już niedługo taki błąd wystąpi.
źródło
Miałem ten sam problem. Niestety
więc zrobiłem to, aby przekonwertować.
i wtedy
źródło
Problemy z uruchamianiem skryptów mogą być również związane z niewłaściwym formatowaniem poleceń wielowierszowych, na przykład jeśli po łamaniu linii „\” występują białe znaki. Np. To:
(zwróć uwagę, że dodatkowa spacja po znaku „\”) spowoduje problemy, ale po usunięciu tego miejsca będzie działać idealnie.
źródło
Miałem też niektóre z plików
Cannot execute command
. Wszystko wyglądało poprawnie, ale tak naprawdę miałem
przed rozkazem nierozerwalną przestrzeń, której oczywiście nie można było dostrzec gołym okiem:Który w Vimie wyglądał tak:
Dopiero po uruchomieniu sprawdzania skryptów Bash
shellcheck
znalazłem problem.źródło
shellcheck
jest dostępny on-line, chociaż oczywiście musisz dokładnie skopiować i wkleić skrypt, aby to pomogło. shellcheck.netNatknąłem się na to dzisiaj, z roztargnieniem kopiując wiersz polecenia dolara
$
(przed ciągiem poleceń) do skryptu.źródło
Dodaj bieżący katalog (.) Do PATH, aby móc wykonać skrypt, po prostu wpisując jego nazwę, która znajduje się w bieżącym katalogu:
źródło
.
DO SWOJEJ ŚCIEŻKI.Możesz chcieć zaktualizować pliki .bashrc i .bash_profile za pomocą aliasów, aby rozpoznać wprowadzane polecenie.
Pliki .bashrc i .bash_profile są plikami ukrytymi, prawdopodobnie znajdującymi się na dysku C:, na którym zapisujesz pliki programu.
źródło