Shebang ( angol shebang , sha-bang , [1] [2] [3] hashbang , [4] [5] pound-bang , [2] [6] vagy hash-pling [2] [7] ) - a programozásban , egy hash jelek sorozata és egy felkiáltójel (" #! ") a szkriptfájl elején .
Amikor egy shebang parancsfájlt programként futtatnak Unix-szerű operációs rendszereken, a programbetöltő a shebang utáni sor fennmaradó részét az értelmező program fájlneveként kezeli . A betöltő futtatja ezt a programot, és átadja neki a parancsfájl nevét a shebang paraméterrel. [8] Például, ha a szkriptfájl teljes neve " path/to/script", és a fájl első sora:
#!/bin/shakkor a rendszerbetöltő futtatja a " /bin/sh" (általában egy Bourne shell vagy kompatibilis parancssori értelmezőt), és path/to/scriptelső paraméterként adja át a " " paramétert.
A shebang sort általában kihagyja az értelmező, mivel a "#" karakter a megjegyzések kezdőkarakterje sok szkriptnyelvben. Néhány értelmező, amely nem használja a hash karaktert a megjegyzések kezdetének megjelölésére (például a Scheme ), elhagyhatja a shebang sort, meghatározva annak célját. [9] Más megoldások egy előfeldolgozóra támaszkodnak, amely feldolgozza és eltávolítja a shebang sort, mielőtt a szkript többi részét átadnák a fordítónak vagy az értelmezőnek. Így például működik az InstantFPC , amely lehetővé teszi a Free Pascal -ban írt programok szkriptként való futtatását egyes operációs rendszereken. [tíz]
A shebang karakterlánc formátuma a következő: [8]
#! tolmács [ opcionális-arg ]Az interpreternek egy végrehajtható [1] programfájl abszolút elérési útjának kell lennie (ha az interpreter egy szkript, akkor annak is shebanggal kell kezdődnie). Az opcionális opcionális-arg- nak egyetlen argumentumú formátumban kell lennie (hordozhatósági okokból nem tartalmazhat szóközt). Szóköz a # után! opcionális. [2]
Néhány tipikus shebang-sor:
A Shebang sorok további argumentumokat is tartalmazhatnak, amelyeket átadnak az értelmezőnek (lásd a fenti Perl példát). Mivel azonban az argumentumok kezelése eltérő lehet, a hordozhatóság érdekében a legjobb, ha csak egy argumentumot használunk szóközök nélkül. A hordozhatóságra vonatkozó további irányelvek alább találhatók.
Az értelmező megadása a shebang sorban lehetővé teszi a szkript- és adatfájlok rendszerparancsként történő használatát, elrejtve a megvalósítás részleteit a felhasználók és más programok elől, mivel nincs szükség az értelmezőfájl megadására a parancssorban a parancsfájl előtt.
Tegyük fel, hogy a Bourne shell szkript a " some/path/to/foo " fájlban található , amelynek első sora
#!/bin/sh -xHa a felhasználó megpróbálja végrehajtani ezt a parancsfájlt a parancssor használatával (a "bar" és a "baz" argumentumként megadva)
some/path/to/foo bar bazakkor az eredmény ugyanaz lesz, mint a parancs futtatása:
/bin/sh -x some/path/to/foo bar bazHa a " /bin/sh " elérési út egy Bourne shell program , akkor a "bar" és a "baz" hozzá lesz rendelve a $1shell helyzeti paramétereihez, és a " some/path/to/foo " $2fájl összes sora ennek a shellnek a parancsaiként kell végrehajtani. Továbbá, mivel a font karakter a megjegyzés kezdő karaktere a Bourne shellben (és sok más shellben), a shebang sor kimarad.
Azonban magának az értelmezőnek kell meghatároznia a shebang karakterlánc végső feldolgozását. Tehát a következő két sort tartalmazó szkript egyszerűen kinyomtatja mindkét sort a szabványos kimenetre :
#!/bin/cat Helló Világ!Összehasonlítva a fájlkiterjesztés globális leképezésével egy értelmezőalkalmazáshoz, az értelmező meghívó karakterláncának megadása a shebangban lehetővé teszi olyan tolmács megadását, amely nem globálisan ismert, és nem igényel rendszergazdai jogosultságokat. A shebang azt is lehetővé teszi, hogy külön-külön megadjon egy értelmezőt egy fájlhoz, anélkül, hogy bevezetné a névtér bonyolult fogalmát, amely egyetlen kiterjesztést több értelmezőhöz rendelhet hozzá.
A shebangnak meg kell adnia egy abszolút elérési utat (vagy az aktuális munkakönyvtárhoz viszonyított elérési utat) a végrehajtható fájlok számára. Ez problémákhoz vezethet a nem szabványos fájlrendszer-struktúrájú rendszerekben. Még a meglehetősen szabványos könyvtárakkal rendelkező rendszereken is előfordulhat, hogy ugyanazon operációs rendszer változatai különböző helyeken tárolják a kívánt értelmezőt. A Python például a /usr/bin/python , /usr/local/bin/python , vagy akár a /home/ felhasználónév /bin/python könyvtárban lehet, ha nem a rendszergazda telepítette.
Ezért a jobb hordozhatóság érdekében az /usr/bin/env fájlt használják, amely képes programokat keresni a PATH -ban, például:
#!/usr/bin/env pythonEbben az esetben bárhol is található a Python interpreter, az elindul.