Zazwyczaj skrypt powłoki jest uruchamiany przez domyślną powłokę zdefiniowaną w pliku/etc/passwd. Ale możesz zdefiniować jawnie program, który może uruchomić twój skrypt.
Unice używa wspólnej metody ustalania programu potrzebnego do uruchomienia określonego skryptu (man execve(2)). Jeśli skrypt ma ustawione odpowiednie prawa wykonywania, aw skrypcie pierwsza linia zaczyna się od znaków #!
, zostanie uruchomiona przez program zdefiniowany później.
Na przykład, jeśli pierwsza linia to #!/usr/bin/awk -f
, wówczas reszta pliku zostanie przekazana do programu awk
(więc musi użyć składni awk
). Lub jeśli Makefile zaczyna się od #!/usr/bin/make -f
, wówczas reszta pliku zostanie przekazana do make
. Możesz uruchomić skrypt jako normalny program, a skrypt można zapisać w postaci składni awk
lub make
(lub innej).
Jeśli execve
nie znajdzie #!
jako dwóch pierwszych znaków pliku, potraktuje to jako zwykły plik skryptu i będzie działać tak jak jest.
Używanie #!
Możesz określić język skryptowy i nie musisz wiedzieć, z której powłoki korzysta inny użytkownik, używając Twojego skryptu. W każdym innym wierszu #!
zostanie zinterpretowana domyślna powłoka, która zwykle jest po prostu linią komentarza.
Byłoby łatwiej, jeśli otoczyłeś skrypty znacznikami kodu. Nieregularna czcionka sprawia, że jest to naprawdę mylące ... – user1581900
#!/Bin/sh określa ścieżkę do powłoki, która powinna być użyta w skrypcie. Na podobne pytanie udzielono odpowiedzi: http: // stackoverflow.com/questions/8967902/why-do-you-need-to-put-bin-bash-at-the-beginning-of-a-script-file – user1581900
możliwy duplikat ... http: //stackoverflow.com/questions/7366775/what-does-the-line-bin-sh-mean-in-a-unix-shell-script – Peeyush