Wykonywanie pliku bash z błędem bin / bash: zły interpreter: Nie ma takiego pliku lub katalogu

Bash jest dla mnie bardzo nowy i spróbuję napisać pierwszy skrypt o nazwie hello_world w ścieżce /Users/me/Study/Linux z treścią napisaną przez vima:

#! bin/bash echo Hello World 

Jednak błąd pojawia się po wykonaniu:

-bash: /Users/me/Study/Linux/hello_world: bin/bash: bad interpreter: No such file or directory 

Przeczytałem wiele pytań na ten temat, ale nadal czuję się całkowicie zagubiony. 🙁 Będę bardzo wdzięczny za Twoją pomoc.

Komentarze

  • spróbuj #! /bin/bash dla pierwsza linia
  • @TedWrigley Dzięki, to działa; ale dlaczego?
  • Shebang (#!) pobiera ścieżkę do pliku wykonywalnego, aw systemie Unix / linux ścieżki muszą zaczynać się od ukośnik.

Odpowiedź

Pierwsza linia twojego skryptu bash musi wyglądać tak.

#!/bin/bash 

Nazywa się to „linią shebang”, ponieważ pierwsze dwa znaki #! to shebang . Linia shebang mówi komputerowi, który program wykonywalny powinien być użyty do zinterpretowania reszty skryptu. W tym przypadku piszesz skrypt basha, ale równie łatwo możesz napisać skryptu dla pythona lub awk i musisz powiedzieć systemowi, którego interpretera użyć na podstawie języka, w którym skrypt jest napisany.

Powód, dla którego twoja linia shebang #! bin/bash nie działa to b ponieważ nie podałeś prawidłowej ścieżki (zazwyczaj ścieżki bezwzględnej ) do interpretera. Jeśli pominiesz początkowy ukośnik /, to powłoka szuka bin w bieżącym katalogu roboczym, ale go nie znajduje.

Ponieważ dopiero zaczynasz uczyć się basha, radzę przeczytać książkę. Dzięki temu nie będziesz musiał zadawać zbyt wielu pytań. Nauka powłoki bash, 3. edycja autorstwa Camerona Newhama jest całkiem dobra.

Komentarze

  • Zwróć uwagę, że spacja po #! jest nieważna – zarówno #!/bin/bash, jak i #! /bin/bash work i #!bin/bash lub #! bin/bash będą działać tylko wtedy, gdy cd / zostanie znaleziony ). Z Twojego linku do Wikipedii " Puste miejsce po! wszystko w porządku "

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *