A számítástechnikában shebangnak nevezik a #! karakterpárt egy szkript elején. Más nevei sha-bang, hashbang, pound-bang, vagy hash-pling. Az elnevezésben a „bang” az időnként a felkiáltójelre is használt angol szó, a she-, sha- előtag az egyik leggyakoribb formájában a #!/bin/sh-ban szereplő parancsértelmezőre, az sh-ra (Bourne shell) utal. Az egyéb elnevezésekben a „pound”, illetve „hash” a „#” jel angol neve.
Unix-szerű operációs rendszerekben (pl. Linuxban) – szemben a Windowszal – nem egy fájl kiterjesztése, hanem a fájlhoz rendelt végrehajtási jogosultság határozza meg, hogy az illető fájlt az operációs rendszer futtatható állománynak tekinti-e. Ez azonban nem elegendő, így futtatás előtt ellenőrizni kell a fájl típusát is annak meghatározásához, miként kell a fájlt futtatni (végrehajtani). Ez a fájl első néhány bájtjának alapján történik meg. Az operációs rendszer által értelmezhető parancsokat tartalmazó szöveges fájlok, az ún szkriptek is lehetnek végrehajthatóak, amennyiben azokat egy parancsértelmező (interpreter) program dolgozza fel. A Windowsban az ilyen fájloknak .bat kiterjesztése van. Unix-szerű operációs rendszerekben viszont ezt a szövegfájl első két bájtja dönti el. Ha egy szövegfájl első sorának első két karaktere #!, amit az interpreter abszolút elérési útvonalának megadása követ, akkor az adott fájl értelmezéséhez az így megadott interpretert használja az operációs rendszer. Például, ha egy szkript a következő sorral kezdődik: #!/bin/sh, akkor a programbetöltő a /bin/sh interpretert használja. Linuxban ezt a viselkedést a kernel és a felhasználói kód együttműködése biztosítja.
Az interpreterek a shebang sort általában figyelmen kívül hagyják, mert a # karakter sok szkriptnyelvben megjegyzést jelöl, de azok a nyelvek, is, amelyekben nem a # karakter jelöli a megjegyzéseket, ezt a sort rendszerint figyelmen kívül hagyhatják.
Szintaxis A shebang utasítássor formája a következő: #!parancsértelmező [ nem kötelező paraméter ] ahol a parancsértelmező (más néven shell) egy futtatható program abszolút elérési útja.
A nem kötelező paraméter szóközöket és tabulátor karaktereket is tartalmazhat, és egyetlen paramétert reprezentál. A #! után is lehet szóköz vagy tabulátor karakter, de ez nem szükséges, és nem is számít.
Linux alatt a parancsértelmező által megadott fájl akkor futtatható, ha rendelkezik végrehajtási joggal, és olyan kódot tartalmaz, amelyet a kernel vagy közvetlenül végrehajthat, ha létezik egy, a sysctl-en keresztül definiált csomagoló (ilyen csomagoló például a Microsoft .exe bináris fájlok futtatásához a wine), vagy ha maga is egy shebangot tartalmazó szkript. A shebangok és a csomagolók láncai egy közvetlenül futtatható fájlt hoznak létre, amely fordított sorrendben kapja meg az egyes parancsfájlokat paraméterként. Például, ha a /bin/A fájl egy futtatható programfájl, a /bin/B fájl pedig egy #!/bin/A paraméter sorral kezdődő szövegfájl, hasonlóan a /bin/C fájlhoz, ami viszont #!/bin/B-vel kezdődik, akkor a /bin/C fájl végrehajtása a /bin/B /bin/C parancsra vált, ami végül a /bin/A paraméter /bin/B /bin/C parancsot eredményezi. (Itt a betűközök a nem kötelező paramétert az interpretertől választják el, vagyis a #/!bin/C sor ekvivalens a #!/bin/A paraméter /bin/B /bin/A sorral.)
Solaris és Darwin alapú operációs rendszerekben (például macOS) az értelmező által megadott fájlnak a kernel által futtathatónak kell lennie, és önmagában nem lehet szkript.https://stackoverflow.com/questions/45444823/python3-shebang-line-not-working-as-expected
Példák Néhány tipikus shebang sor:
#!/bin/sh – a fájl végrehajtása a Bourne shell vagy egy kompatibilis shell használatával, amelyről feltesszük, hogy a /bin könyvtárban található #!/bin/bash – a fájl végrehajtása a Bash (Bourne-again Shell) használatával #!/usr/bin/env python3 – végrehajtás Python-interpreter segítségével, a program keresési útvonalának használatával #!/bin/false – ne tegyen semmit, de adjon vissza nullától eltérő kilépési állapotot, jelezve a hibát. Olyan parancsfájl önálló végrehajtásának megakadályozására szolgál, amelyet egy speciális kontextusban használunk. Ilyen például a . parancs az sh/bash-ból, source a csh/tcsh-ból, illetve a .profile, .cshrc vagy .login fájl.
Előnyei Összehasonlítva a Windowsban szokásos, a fájlkiterjesztéseken alapuló program végrehajtási módot a Unix-szerű rendszerekben használt parancsértelmező alkalmazásokkal, az utóbbi lehetővé teszi a felhasználók számára, hogy globális, vagyis rendszerszinten nem ismert és rendszergazdai jogosultságok nélküli interpretereket használjanak. Ezzel fájlonként lehetséges a parancsértelmező-választás így akkor is használható, ha egy fájlkiterjesztés egynél több fájltípusra vonatkozik. Azt is lehetővé teszi, hogy a szkript végrehajtási nyelvét megváltoztassuk anélkül, hogy azok meghívási szintaxisát máshol módosítanunk kellene. A szkriptet végrehajtató programoknak nem kell tudniuk, hogy mi a szkript nyelve, mivel maga a szkript felelős a parancsértelmező kiválasztásáért.
Jegyzetek
Fordítás
Kategória:Unix