Je to konvence, takže shell *nix ví, jaký druh interpretu spustit.
Například starší verze ATT měly výchozí hodnotu sh (Bourne shell), zatímco starší verze BSD měly výchozí hodnotu csh (C shell).
Dokonce i dnes (kde většina systémů spouští bash, "Bourne Again Shell" ), skripty mohou být v bash, python, perl, ruby, PHP atd., atd. Můžete například vidět #!/bin/perl
nebo #!/bin/perl5
.
PS:Vykřičník (!
) se láskyplně nazývá "bang" . Symbol komentáře shellu (#
) se někdy nazývá "hash" .
PPS:Pamatujte - pod *nix je přiřazení přípony k typu souboru pouze konvencí , nikoli „pravidlo“ . Spustitelný soubor může být binární program, kterýkoli z milionu typů skriptů a další věci. Proto je potřeba #!/bin/bash
.
Přesněji řečeno, shebang #!
, když se jedná o první dva bajty spustitelného souboru (x
mode), je interpretován systémovým voláním execve(2) (které spouští programy). Ale specifikace POSIX pro execve
nezmiňujte shebang.
Musí za ním následovat cesta k souboru spustitelného interpretu (který BTW může být dokonce relativní, ale nejčastěji je absolutní).
Pěkný trik (nebo možná ne tak dobrý), jak najít tlumočníka (např. python
) v uživatelském $PATH
je použít env
program (vždy na /usr/bin/env
na všech Linuxech), jako je např.
#!/usr/bin/env python
Jakýkoli spustitelný soubor ELF může být interpretem. Můžete dokonce použít #!/bin/cat
nebo #!/bin/true
kdybys chtěl! (ale to by bylo často k ničemu)
Říká se tomu shebang. V unixovém jazyce se # nazývá ostrý (jako v hudbě) nebo hash (jako hashtagy na Twitteru) a ! se nazývá bang. (Ve skutečnosti můžete odkazovat na svůj předchozí příkaz shell s !!, nazvaný bang-bang). Takže když to dáte dohromady, dostanete haSH-BANG nebo shebang.
Část po #! říká Unixu, jaký program použít ke spuštění. Pokud není zadán, zkusí to s bash (nebo sh, nebo zsh, nebo jaká je vaše proměnná $SHELL), ale pokud tam je, použije tento program. Navíc # je ve většině jazyků komentář, takže při následném spuštění je řádek ignorován.