Shebang ( engelsk shebang, sha-bang , [1] [2] [3] hashbang , [4] [5] pund-bang , [2] [6] eller hash-pling [2] [7] ) - i programmering , en sekvens af hash- tegn og et udråbstegn (" #! ") i begyndelsen af en scriptfil .
Når et script med en shebang køres som et program på Unix-lignende operativsystemer, behandler programindlæseren resten af linjen efter shebang som filnavnet på tolkeprogrammet . Indlæseren kører dette program og giver det navnet på scriptfilen med shebang som parameter. [8] For eksempel, hvis det fulde navn på scriptfilen er " path/to/script", og den første linje i denne fil er:
#!/bin/shså vil bootloaderen køre " /bin/sh" (normalt en Bourne shell eller kompatibel kommandolinjefortolker) og sende " path/to/script" som den første parameter.
Shebang-linjen springes normalt over af tolken, da tegnet "#" er starttegnet for kommentarer på mange scriptsprog. Nogle tolke, der ikke bruger hash-tegnet til at markere begyndelsen af kommentarer (såsom Scheme ), kan udelade shebang-linjen, hvilket definerer dens formål. [9] Andre løsninger er afhængige af en præprocessor, der behandler og fjerner shebang-linjen, før resten af scriptet sendes til compileren eller fortolkeren. Så for eksempel virker InstantFPC , som giver dig mulighed for at køre programmer skrevet i Free Pascal som scripts på nogle operativsystemer. [ti]
Shebang-strengen har følgende format: [8]
#! tolk [ valgfrit-arg ]tolk skal være en absolut sti til en eksekverbar [1] programfil (hvis tolken er et script, skal den også starte med en shebang). Det valgfri optional-arg skal være i enkelt argumentformat (af portabilitetsgrunde må det ikke indeholde mellemrum). Mellemrum efter #! er valgfrit. [2]
Et par typiske shebang-linjer:
Shebang-linjer kan indeholde yderligere argumenter, der sendes til tolken (se Perl-eksemplet ovenfor). Men da håndteringen af argumenter kan variere af hensyn til portabilitet, er det bedst kun at bruge ét argument uden mellemrum indeni. Yderligere retningslinjer for portabilitet er givet nedenfor.
Angivelse af en fortolker på shebang-linjen gør det muligt at bruge script- og datafiler som systemkommandoer, hvilket skjuler implementeringsdetaljer for brugere og andre programmer ved at eliminere behovet for at specificere fortolkerfilen på kommandolinjen før scriptfilen.
Antag at Bourne shell -scriptet er i filen " some/path/to/foo ", hvis første linje er
#!/bin/sh -xHvis brugeren forsøger at udføre denne scriptfil ved hjælp af kommandolinjen (angiver "bar" og "baz" som argumenter)
nogle/sti/til/foo bar bazså bliver resultatet det samme som at køre kommandoen:
/bin/sh -x some/path/to/foo bar bazHvis stien " /bin/sh " er et Bourne shell program , så vil "bar" og "baz" blive tildelt til shellens positionelle parametre $1, $2og alle linjer i filen " some/path/to/foo " vil udføres som kommandoer i denne shell. Da pund-karakteren er kommentarstartkarakteren i Bourne-skallen (og mange andre skaller), vil shebang-linjen blive sprunget over.
Det er dog op til tolken selv at bestemme den endelige behandling af shebang-strengen. Så et script, der indeholder følgende to linjer, ville simpelthen udskrive begge linjer til standardoutput :
#!/bin/kat Hej Verden!Sammenlignet med at bruge den globale tilknytning af en filtypenavn til en fortolkerapplikation, giver specificering af en fortolkerinvokationsstreng i en shebang dig mulighed for at angive en fortolker, der ikke er globalt kendt og ikke kræver systemadministratorrettigheder. Shebang giver dig også mulighed for at specificere en tolk individuelt til en fil uden at introducere det komplicerede koncept med et navneområde for at kortlægge en enkelt udvidelse til flere tolke.
Shebang skal give en absolut sti (eller en sti i forhold til den aktuelle arbejdsmappe) for eksekverbare filer. Dette kan føre til problemer for systemer med en ikke-standard filsystemstruktur. Selv på systemer med nogenlunde standardmapper er det muligt, at varianter af det samme styresystem gemmer den ønskede fortolker forskellige steder. Python kan for eksempel være i /usr/bin/python , /usr/local/bin/python eller endda /home/ brugernavn /bin/python , hvis det blev installeret af en anden end systemadministratoren.
Derfor, for bedre portabilitet, bruges /usr/bin/env, som har mulighed for at søge efter et program i PATH , for eksempel:
#!/usr/bin/env pythonI dette tilfælde, hvor end Python-fortolkeren er placeret, vil den blive lanceret.