Shebang (Unix)

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2020. szeptember 7-én felülvizsgált verziótól ; az ellenőrzések 6 szerkesztést igényelnek .

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/sh

akkor 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]

Szintaxis

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]

Példák

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.

Időpont

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 -x

Ha 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 baz

akkor az eredmény ugyanaz lesz, mint a parancs futtatása:

/bin/sh -x some/path/to/foo bar baz

Ha 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!

Előnyök

Ö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á.

Hordozhatóság

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 python

Ebben az esetben bárhol is található a Python interpreter, az elindul.

Lásd még

Jegyzetek

  1. Advanced Bash Scripting Guide . Letöltve: 2012. január 19.
  2. 1 2 3 4 A #! varázslat, részletek a shebang/hash-bang mechanizmusról . Letöltve: 2012. január 19.
  3. Cooper, Mendel. Advanced Bash Scripting Guide 5.3 1.  kötet . - lulu.com, 2010. - P. 5. - ISBN 978-1-4357-5218-4 .
  4. MacDonald, Matthew. HTML5: The Missing Manual  (neopr.) . - Sebastopol, California: O'Reilly Media , 2011. - P. 373. - ISBN 978-1-4493-0239-9 .
  5. Lutz, Mark. Python tanulása  (határozatlan) . — 4. - O'Reilly Media , 2009. - P. 48. - ISBN 978-0-596-15806-4 .
  6. Hazudj Hetland, Magnus. Kezdő Python: Kezdőtől  professzionálisig . - Apress , 2005. - P. 21. - ISBN 978-1-59059-519-0 .
  7. Schitka, János. Linux+ Útmutató a Linux-tanúsítványhoz  (neopr.) . — Tanfolyamtechnika, 2002. - P. 353. - ISBN 978-0-619-13004-6 .
  8. 1 2 execve(2) - Linux kézikönyvoldal . Letöltve: 2010. október 21.
  9. SRFI 22
  10. Azonnali FPC dokumentáció

Linkek