Shell skripty obecně obsahují na prvním řádku souboru skriptu následující komentář:#!/bin/sh
. Podle výzkumů, které jsem provedl, se tomu říká „hash bang“ a je to konvenční komentář. Tento komentář informuje Unix, že tento soubor spouští Bourne Shell v adresáři /bin
.
Moje otázka začíná v tomto bodě. Doposud jsem neviděl tento komentář jako #!/bin/bash
. Vždy je to #!/bin/sh
. Distribuce Ubuntu však nemají program Bourne Shell. Mají Bourne Again Shell (bash).
Je v tomto bodě správné umístit komentář #!/bin/sh
ve skriptech shellu napsaných v distribucích Ubuntu?
Přijatá odpověď:
#!/bin/sh
by měl fungovat na všech unixových a unixových distribucích. Obecně je považován za nejpřenosnější hashbang, pokud je váš skript udržován v souladu s POSIX. /bin/sh
shell má být shell, který implementuje standard shellu POSIX, bez ohledu na to, jaký je skutečný shell, který se maskuje jako /bin/sh
shell.
#!/bin/sh
je nyní normálně pouze odkazem, protože Bourne shell již není udržován. Na mnoha unixových systémech /bin/sh
bude odkaz na /bin/ksh
nebo /bin/ash
, na mnoha systémech Linux založených na RHEL to bude odkaz na /bin/bash
, nicméně na Ubuntu a mnoha systémech založených na Debianu je to odkaz na /bin/dash
. Všechny shelly, když jsou vyvolány jako sh
, přejde do režimu kompatibility POSIX.
Hashbang je však důležitým zástupným symbolem, protože umožňuje mnohem větší přenositelnost než jiné metody, pokud je váš skript striktně kompatibilní s POSIX (opakováno pro zdůraznění důležitosti).
Poznámka:Když bash
je vyvolán v režimu POSIX, stále bude umožňovat některé věci, které nejsou POSIX, jako je [[
, pole a další. Tyto věci mohou selhat na jiném než bash
systém.