Shebang – Wikipedia, wolna encyklopedia
Shebang (ang. shebang line, bang path) – sekwencja znaków umieszczana na początku skryptu, a rozpoczynająca się kratką i wykrzyknikiem. Stosowana jest w Uniksie i systemach uniksopodobnych.
Historia
[edytuj | edytuj kod]Mechanizm ten został wprowadzony przez Dennisa Ritchie w 1980 roku[1]. Wcześniej uruchamianiem skryptów zajmowała się powłoka systemowa, co skutkowało tym, że skrypty nie były właściwie rozpoznawane przez narzędzie ps[1]. Po zmianie uruchamianie skryptów przypadło jądru systemu, co pozwoliło na ich uruchamianie poprzez wywołanie systemowe exec
, nadawanie im setuid, korzystanie z interpreterów innych niż powłoka użytkownika, uruchomiony skrypt był także od tej pory właściwie rozpoznawany przez ps[1]. Oryginalnie długość podanej ścieżki nie mogła przekroczyć 16 znaków[1].
Zastosowanie
[edytuj | edytuj kod]Tekst następujący po wykrzykniku, aż do pierwszej spacji, to ścieżka do interpretera, który ma zostać użyty w celu wykonania skryptu, na przykład:
#!/usr/bin/python
spowoduje uruchomienie pliku jako programu w Pythonie.
W niektórych wariantach Uniksa możliwe jest też podawanie parametrów, np.:
#!/usr/bin/python -i
co spowoduje wywołanie skryptu, tak jakby z wiersza poleceń wywołać go:
/usr/bin/python -i <nazwa skryptu>
Ze względu na przenośność skryptów często stosowanym rozwiązaniem jest pośrednie wywołanie interpretera z użycie programu env: #!/usr/bin/env <nazwa interpretera>
– skutkuje to przeszukaniem katalogów zawartych w zmiennej środowiskowej PATH w poszukiwaniu interpretera. Zapewnia to zgodność skryptów z różnymi systemami niezależnie od tego, w jakiej ścieżce umieszczono wywoływany interpreter. Przykładowo interpreter języka Python może znajdować się w ścieżce /usr/bin/python
, /usr/local/bin/python
lub nawet w katalogu użytkownika, np. /home/username/bin/python
.
Przypisy
[edytuj | edytuj kod]- ↑ a b c d Dennis Ritchie: Shebang – 4.0BSD. 1980-01-10.