Shebang (Unix)

Versiunea actuală a paginii nu a fost încă examinată de colaboratori experimentați și poate diferi semnificativ de versiunea revizuită pe 7 septembrie 2020; verificările necesită 6 modificări .

Shebang   ( engleză shebang ,  sha-bang , [1] [2] [3] hashbang , [4] [5] pound-bang , [2] [6] sau hash-pling [2] [7] ) - în programare , o secvență de  semne hash  și un semn de exclamare  (" #! ") la începutul  unui fișier script .

Când un script cu un shebang este rulat ca program pe  sisteme de operare asemănătoare Unix  , încărcătorul de programe tratează restul liniei după shebang ca numele de fișier al programului de interpret . Încărcătorul rulează acest program și îi transmite numele fișierului script cu shebang ca parametru. [8]  De exemplu, dacă numele complet al fișierului script este „ path/to/script” și prima linie a acestui fișier este:

#!/bin/sh

apoi bootloader-ul va rula „ /bin/sh” (de obicei un  shell Bourne  sau un interpret de linie de comandă compatibil) și va trece „ path/to/script” ca prim parametru.

Linia shebang este de obicei omisă de către interpret, deoarece caracterul „#” este caracterul de început pentru comentarii în multe limbaje de scripting. Unii interpreți care nu folosesc caracterul hash pentru a marca începutul comentariilor (cum ar fi Scheme ) pot omite linia shebang, definindu-i scopul. [9] Alte soluții se bazează pe un preprocesor care procesează și elimină linia shebang înainte ca restul scriptului să fie transmis compilatorului sau interpretului. Deci, de exemplu, funcționează InstantFPC , ceea ce vă permite să rulați programe scrise în Free Pascal ca scripturi pe unele sisteme de operare. [zece]

Sintaxă

Șirul shebang are următorul format: [8]

#! interpret [ optional-arg ]

interpreterul trebuie să fie o cale absolută către un fișier de program executabil [1] (dacă interpretul este un script, trebuie să înceapă și cu un shebang). Opțional -arg- ul opțional trebuie să fie în format un singur argument (din motive de portabilitate, nu trebuie să conțină spații). Spațiu după #! este optional. [2]

Exemple

Câteva replici tipice shebang:

Liniile Shebang pot conține argumente suplimentare care sunt transmise interpretului (vezi exemplul Perl de mai sus). Cu toate acestea, deoarece manipularea argumentelor poate varia, pentru portabilitate, cel mai bine este să folosiți un singur argument fără spații în interior. Îndrumări suplimentare privind portabilitatea sunt prezentate mai jos.

Numire

Specificarea unui interpret pe linia shebang permite utilizarea fișierelor de script și de date ca comenzi de sistem, ascunzând detaliile de implementare de utilizatori și alte programe, eliminând necesitatea de a specifica fișierul de interpret pe linia de comandă înainte de fișierul de script.

Să presupunem că scriptul shell Bourne se află în fișierul „ some/path/to/foo ”, a cărui primă linie este

#!/bin/sh -x

Dacă utilizatorul încearcă să execute acest fișier script folosind linia de comandă (specificând „bar” și „baz” ca argumente)

some/path/to/foo bar baz

atunci rezultatul va fi același cu rularea comenzii:

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

Dacă calea „ /bin/sh ” este un program Bourne shell , atunci „bar” și „baz” vor fi alocate parametrilor de poziție ai $1shell -ului $2și toate liniile fișierului „ some/path/to/foo ” vor fi fi executat ca comenzi ale acestui shell. De asemenea, deoarece caracterul pound este caracterul de început al comentariului în shell-ul Bourne (și în multe alte shell-uri), linia shebang va fi omisă.

Cu toate acestea, este la latitudinea interpretului însuși să determine procesarea finală a șirului shebang. Deci, un script care conține următoarele două linii ar imprima pur și simplu ambele linii la ieșirea standard :

#!/bin/cat Salut Lume!

Beneficii

În comparație cu utilizarea mapării globale a unei extensii de fișier la o aplicație de interpret, specificarea unui șir de invocare a interpretului într-un shebang vă permite să specificați un interpret care nu este cunoscut la nivel global și nu necesită privilegii de administrator de sistem. Shebang vă permite, de asemenea, să specificați un interpret individual pentru un fișier, fără a introduce conceptul complicat de spațiu de nume pentru a mapa o singură extensie la mai mulți interpreți.

Portabilitate

Shebang-ul trebuie să ofere o cale absolută (sau o cale relativă la directorul de lucru curent) pentru fișierele executabile. Acest lucru poate duce la probleme pentru sistemele cu o structură de sistem de fișiere non-standard. Chiar și pe sistemele cu directoare destul de standard, este posibil ca variantele aceluiași sistem de operare să stocheze interpretul dorit în locuri diferite. Python , de exemplu, ar putea fi în /usr/bin/python , /usr/local/bin/python , sau chiar /home/ nume de utilizator /bin/python dacă a fost instalat de altcineva decât administratorul de sistem.

Prin urmare, pentru o portabilitate mai bună, se folosește /usr/bin/env, care are capacitatea de a căuta un program în PATH , de exemplu:

#!/usr/bin/env python

În acest caz, oriunde se află interpretul Python, acesta va fi lansat.

Vezi și

Note

  1. Ghid avansat de scriptare Bash . Preluat la 19 ianuarie 2012.
  2. 1 2 3 4 #! magie, detalii despre mecanismul shebang/hash-bang . Preluat la 19 ianuarie 2012.
  3. Cooper, Mendel. Ghid avansat de scriptare Bash 5.3 Volumul  1 . - lulu.com, 2010. - P. 5. - ISBN 978-1-4357-5218-4 .
  4. MacDonald, Matthew. HTML5: Manualul lipsă  (neopr.) . - Sebastopol, California: O'Reilly Media , 2011. - P. 373. - ISBN 978-1-4493-0239-9 .
  5. Lutz, Mark. Învățarea Python  (nedefinit) . — al 4-lea. - O'Reilly Media , 2009. - P. 48. - ISBN 978-0-596-15806-4 .
  6. Lie Hetland, Magnus. Începând cu Python: de la novice la  profesionist . - Apress , 2005. - P. 21. - ISBN 978-1-59059-519-0 .
  7. Schitka, John. Ghid Linux+ pentru certificarea Linux  (neopr.) . — Tehnologia cursului, 2002. - P. 353. - ISBN 978-0-619-13004-6 .
  8. 1 2 execve(2) - Pagina de manual Linux . Preluat la 21 octombrie 2010.
  9. SRFI 22
  10. Documentație FPC instantanee

Link -uri