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.

Sekwencja znaków Shebang

Historia edytuj

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

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

  1. a b c d Dennis Ritchie: Shebang – 4.0BSD. 1980-01-10.