Shebang ( englanniksi shebang , sha-bang , [1] [2] [3] hashbang , [4] [5] pound-bang , [2] [6] tai hash-pling [2] [7] ) - ohjelmoinnissa , sarja hash- merkkejä ja huutomerkki (" #! ") komentosarjatiedoston alussa .
Kun komentosarja, jossa on shebang, ajetaan ohjelmana Unix-tyyppisissä käyttöjärjestelmissä, ohjelmanlataaja käsittelee shebangin jälkeisen rivin loppuosan tulkkiohjelman tiedostonimenä . Latausohjelma suorittaa tämän ohjelman ja välittää sille komentosarjatiedoston nimen parametrina shebang. [8] Jos esimerkiksi komentosarjatiedoston koko nimi on " path/to/script" ja tämän tiedoston ensimmäinen rivi on:
#!/bin/shsitten käynnistyslatain suorittaa " /bin/sh" (yleensä Bourne-kuoren tai yhteensopivan komentorivitulkin) ja välittää " path/to/script" ensimmäisenä parametrina.
Tulkki ohittaa yleensä shebang-rivin, koska "#"-merkki on kommenttien aloitusmerkki monilla komentosarjakielillä. Jotkut tulkit, jotka eivät käytä hash-merkkiä merkitsemään kommenttien alkua (kuten Scheme ), voivat jättää shebang-rivin pois ja määrittää sen tarkoituksen. [9] Muut ratkaisut perustuvat esiprosessoriin, joka käsittelee ja poistaa shebang-rivin ennen kuin loput skriptistä välitetään kääntäjälle tai tulkille. Joten esimerkiksi InstantFPC toimii , jonka avulla voit ajaa Free Pascalilla kirjoitettuja ohjelmia komentosarjoina joissakin käyttöjärjestelmissä. [kymmenen]
Shebang-merkkijonolla on seuraava muoto: [8]
#! tulkki [ optional-arg ]tulkin on oltava absoluuttinen polku suoritettavaan ohjelmatiedostoon [1] (jos tulkki on komentosarja, sen on myös aloitettava shebangilla). Valinnaisen valinnaisen argin on oltava yhden argumentin muodossa (siirrettävyyden vuoksi se ei saa sisältää välilyöntejä). Välilyönti # jälkeen! on valinnainen. [2]
Muutama tyypillinen shebang-rivi:
Shebang-rivit voivat sisältää lisäargumentteja, jotka välitetään tulkille (katso Perl-esimerkki yllä). Koska argumenttien käsittely voi kuitenkin vaihdella, siirrettävyyden vuoksi on parasta käyttää vain yhtä argumenttia ilman välilyöntejä. Muut siirrettävyysohjeet on annettu alla.
Tulkin määrittäminen shebang-rivillä sallii komentosarja- ja datatiedostojen käytön järjestelmäkomentoina ja piilottaa toteutustiedot käyttäjiltä ja muilta ohjelmilta, koska tulkkitiedostoa ei tarvitse määrittää komentorivillä ennen komentosarjatiedostoa.
Oletetaan, että Bournen komentosarja on tiedostossa " some/path/to/foo ", jonka ensimmäinen rivi on
#!/bin/sh -xJos käyttäjä yrittää suorittaa tämän komentosarjatiedoston komentorivillä (määrittää "bar" ja "baz" argumenteiksi)
some/path/to/foo bar bazniin tulos on sama kuin komennon suorittaminen:
/bin/sh -x some/path/to/foo bar bazJos polku " /bin/sh " on Bournen komentotulkkiohjelma , "bar" ja "baz" määritetään $1komentotulkin sijaintiparametreille $2ja kaikki tiedoston " some/path/to/foo " rivit suoritetaan tämän komentotulkin komentoina. Lisäksi, koska puntamerkki on kommentin aloitusmerkki Bourne-kuoressa (ja monissa muissa kuorissa), shebang-rivi ohitetaan.
Kuitenkin tulkin itsensä tehtävänä on määrittää shebang-merkkijonon lopullinen käsittely. Joten komentosarja, joka sisältää seuraavat kaksi riviä, tulostaa molemmat rivit vakiotulostukseen :
#!/bin/kissa Hei maailma!Verrattuna yleisen tiedostotunnisteen yhdistämiseen tulkkisovellukseen, tulkin kutsumerkkijonon määrittäminen shebangissa antaa sinun määrittää tulkin, joka ei ole maailmanlaajuisesti tunnettu eikä vaadi järjestelmänvalvojan oikeuksia. Shebang mahdollistaa myös tulkin määrittämisen tiedostolle erikseen ilman monimutkaista nimiavaruuden käsitettä, joka yhdistää yhden laajennuksen useisiin tulkkeihin.
Shebangin on annettava suoritettaville tiedostoille absoluuttinen polku (tai polku suhteessa nykyiseen työhakemistoon). Tämä voi johtaa ongelmiin järjestelmissä, joissa on epätyypillinen tiedostojärjestelmärakenne. Jopa järjestelmissä, joissa on melko vakiohakemistoja, on mahdollista, että saman käyttöjärjestelmän variantit tallentavat halutun tulkin eri paikkoihin. Python voi esimerkiksi olla hakemistossa /usr/bin/python , /usr/local/bin/python tai jopa /home/ käyttäjänimi /bin/python , jos sen on asentanut joku muu kuin järjestelmänvalvoja.
Siksi paremman siirrettävyyden vuoksi käytetään tiedostoa /usr/bin/env, jolla on kyky etsiä ohjelmaa PATH :sta , esimerkiksi:
#!/usr/bin/env pythonTässä tapauksessa, missä Python-tulkki sijaitsee, se käynnistetään.