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.