Shebang (Unix)

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 7. září 2020; kontroly vyžadují 6 úprav .

Shebang   ( anglicky shebang,  sha-bang , [1] [2] [3] hashbang , [4] [5] pound-bang , [2] [6] nebo hash-pling [2] [7] ) - v programování , posloupnost  značek hash  a vykřičník  (" #! ") na začátku  souboru skriptu .

Když je skript s shebang spuštěn jako program na  operačních systémech podobných  Unixu, zavaděč programu považuje zbytek řádku po shebang za název souboru interpretačního programu . Zavaděč spustí tento program a předá mu název souboru skriptu s parametrem shebang. [8]  Pokud je například úplný název souboru skriptu " path/to/script" a první řádek tohoto souboru je:

#!/bin/sh

pak zavaděč spustí " /bin/sh" (obvykle  Bourne shell  nebo kompatibilní interpret příkazového řádku) a předá " path/to/script" jako první parametr.

Řádek shebang je obvykle interpretem přeskočen, protože znak "#" je počáteční znak pro komentáře v mnoha skriptovacích jazycích. Někteří interpreti, kteří nepoužívají znak hash k označení začátku komentářů (jako je Scheme ), mohou vynechat řádek shebang, čímž definují jeho účel. [9] Jiná řešení spoléhají na preprocesor, který zpracuje a odstraní řádek shebang předtím, než je zbytek skriptu předán kompilátoru nebo interpretu. Funguje tedy například InstantFPC , který umožňuje na některých operačních systémech spouštět programy napsané ve Free Pascalu jako skripty. [deset]

Syntaxe

Řetězec shebang má následující formát: [8]

#! interpret [ optional-arg ]

interpreter musí být absolutní cesta ke spustitelnému [1] programovému souboru (pokud je interpretem skript, musí také začínat znakem shebang). Nepovinný volitelný argument musí být ve formátu jednoho argumentu (z důvodů přenositelnosti nesmí obsahovat mezery). Mezera za #! je volitelná. [2]

Příklady

Několik typických linií Shebang:

Řádky Shebang mohou obsahovat další argumenty, které jsou předány interpretu (viz příklad v Perlu výše). Protože se však zpracování argumentů může lišit, z důvodu přenositelnosti je nejlepší použít pouze jeden argument bez mezer uvnitř. Další pokyny pro přenositelnost jsou uvedeny níže.

Schůzka

Zadání tlumočníka na řádku shebang umožňuje použití skriptových a datových souborů jako systémových příkazů, skrytí podrobností o implementaci před uživateli a jinými programy tím, že odpadá nutnost zadávat soubor tlumočníka na příkazovém řádku před souborem skriptu.

Předpokládejme, že skript Bourne shell je v souboru " some/path/to/foo ", jehož první řádek je

#!/bin/sh -x

Pokud se uživatel pokusí spustit tento soubor skriptu pomocí příkazového řádku (zadáním "bar" a "baz" jako argumentů)

some/path/to/foo bar baz

pak výsledek bude stejný jako při spuštění příkazu:

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

Pokud je cesta " /bin/sh " programem Bourne shell , pak "bar" a "baz" budou přiřazeny k pozičním parametrům $1shellu $2a všechny řádky souboru " some/path/to/foo " budou být provedeny jako příkazy tohoto shellu . Vzhledem k tomu, že znak libra je znakem začátku komentáře v Bourne shellu (a mnoha dalších shellech), bude řádek shebang přeskočen.

Je však na samotném interpretovi, aby určil konečné zpracování řetězce shebang. Skript obsahující následující dva řádky by tedy jednoduše vytiskl oba řádky na standardní výstup :

#!/bin/cat Ahoj světe!

Výhody

Ve srovnání s používáním globálního mapování přípony souboru na aplikaci tlumočníka vám zadání řetězce vyvolání tlumočníka v shebang umožňuje určit tlumočníka, který není globálně známý a nevyžaduje oprávnění správce systému. Shebang vám také umožňuje specifikovat interpreta individuálně pro soubor, aniž byste zaváděli komplikovaný koncept jmenného prostoru pro mapování jedné přípony na více interpretů.

Přenositelnost

Shebang musí udávat absolutní cestu (nebo cestu relativní k aktuálnímu pracovnímu adresáři) pro spustitelné soubory. To může vést k problémům u systémů s nestandardní strukturou souborového systému. I na systémech s poměrně standardními adresáři je možné, že varianty stejného operačního systému uloží požadovaný interpret na různých místech. Python může být například v /usr/bin/python , /usr/local/bin/python nebo dokonce /home/ username /bin/python , pokud jej nainstaloval někdo jiný než správce systému.

Pro lepší přenositelnost se proto používá /usr/bin/env, který má možnost vyhledat program v PATH , například:

#!/usr/bin/env python

V tomto případě, kdekoli je interpret Pythonu umístěn, bude spuštěn.

Viz také

Poznámky

  1. Advanced Bash Scripting Guide . Staženo 19. ledna 2012.
  2. 1 2 3 4 #! magie, podrobnosti o mechanismu shebang/hash-bang . Staženo 19. ledna 2012.
  3. Cooper, Mendel. Advanced Bash Scripting Guide 5.3 Volume  1 . - lulu.com, 2010. - S. 5. - ISBN 978-1-4357-5218-4 .
  4. MacDonald, Matthew. HTML5: The Missing Manual  (neopr.) . - Sebastopol, Kalifornie: O'Reilly Media , 2011. - S. 373. - ISBN 978-1-4493-0239-9 .
  5. Lutz, Mark. Učení Pythonu  (neurčité) . — 4. - O'Reilly Media , 2009. - S. 48. - ISBN 978-0-596-15806-4 .
  6. Lež Hetland, Magnusi. Začátek Pythonu: Od nováčka k  profesionálovi . - Apress , 2005. - S. 21. - ISBN 978-1-59059-519-0 .
  7. Schitka, John. Linux+ Průvodce certifikací Linuxu  (neopr.) . — Technologie kurzu, 2002. - S. 353. - ISBN 978-0-619-13004-6 .
  8. 1 2 execve(2) – manuálová stránka Linuxu . Staženo 21. října 2010.
  9. SRFI 22
  10. Okamžitá dokumentace FPC

Odkazy