Shebang

Shebang , reprezentat de #! , este un antet al unui fișier text care indică sistemului de operare (de tip Unix ) că acest fișier nu este un fișier binar, ci un script (set de comenzi); pe aceeași linie este specificat interpretul folosit pentru a executa acest script.

Numele său este, probabil, un portmanteau pentru ascuțit ( ascuțit , desemnând aici în mod necorespunzător crucea , #) și bang (desemnând aici punctul de exclamare ,! ). Există și alte nume: sha-bang , shabang , she-bang , hash-bang .

Portabilitate

Pentru a asigura portabilitatea , aceste caractere sunt întotdeauna poziționate chiar la începutul fișierului. Pe un sistem compatibil ASCII sau UTF-8 , secvența #! la începutul fișierului poate fi codat doar de două serii de octeți: 0x23 0x21(în ASCII sau UTF-8 fără BOM ) sau 0xEF 0xBB 0xBF 0x23 0x21(UTF-8 cu BOM). Această secvență este considerată un „  număr magic  ” ( număr magic ) prin ușurința pe care o oferă.

Existența unei BOM la începutul scriptului nu este recomandată, deoarece sistemele Unix mai vechi nu tolerează acest caracter. Luarea în considerare a acestui caracter este o operațiune complexă. Pentru a fi compatibil cu un sistem atât de limitat, dezvoltatorul are doar două posibilități: codificați scriptul cu o codificare dictată de shebang sau lansați interpretul la fiecare apel, fără a trece prin shebang.

Operațiune

Imediat după shebang este o cale de acces (exemplu :) #!/bin/sh. Este posibil să adăugați un spațiu între punctul de exclamare și începutul căii. Deci secvența #! /bin/sheste validă și echivalentă cu #!/bin/sh. Calea este calea către programul care interpretează comenzile acestui script, indiferent dacă este un shell , un limbaj de script , un limbaj de programare sau un utilitar. Poate fi urmat de opțiuni pe care le recunoaște (de exemplu -x pentru un shell pentru a afișa detaliile execuției sale). Apoi, acest interpret de comenzi execută comenzile scriptului, începând de la început (linia 1), ignorând comentariile.

Exemple de shebang:

#!/bin/sh -x #!/bin/bash #!/usr/bin/perl #!/usr/bin/tcl #!/bin/sed -f #!/usr/awk -f #!/usr/bin/python -O — Execute using Python with optimizations to code

Notă

Putem folosi comanda env în locul unui interpret de comandă pentru a o căuta în PATH (ceea ce evită să fie necesar să rescriem prima linie a scripturilor dacă trebuie să le portăm de exemplu pe o altă mașină):

#!/usr/bin/env python

… Dar problema este că există riscul de a nu apela versiunea corectă a interpretului dacă sunt prezente mai multe pe aparat. O modalitate de a depăși acest lucru este să detaliați numele interpretului:

#!/usr/bin/env python2

Vedea:

#!/usr/bin/env python2.7

Rețineți că aceste comenzi sunt uneori echivalente: astfel, pe o mașină pe care sunt instalate python 2.7 și python 3.0, python2va fi în general o legătură simbolică către python2.7. Pe de altă parte, nu putem garanta către ce punct se îndreaptă python : pe unele mașini, acesta va indica spre python2, în timp ce pe altele, se poate îndrepta spre python3.

Note și referințe

  1. (în) "  shebang  " pe catb.org, The Fișierul jargon (accesat 29 aprilie 2021 ) .
  2. (în) Markus Kuhn, „  Întrebări frecvente despre UTF-8 și Unicode pentru Unix / Linux: Ce codificări diferite există?  " .