Ali je kakšen Bash
shebang objektivno boljši od drugih za večino uporab?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
Nejasno se spomnim, da sem pred časom slišal, da dodajanje pomišljaja na koncu preprečuje, da bi nekdo posredoval ukaz vaši skripti, vendar o tem ne morem najti nobenih podrobnosti.
Uporabite #!/usr/bin/env bash
zaradi prenosljivosti: različni *niksi postavljajo bash
na različna mesta in uporaba /usr/bin/env
je obvoz, da zaženete prvi bash
, ki ga najdete na PATH
. In sh
ni bash
.
/bin/sh
je običajno povezava na privzeto lupino sistema, ki je pogosto bash
, na primer v sistemih Debian pa je lažja dash
. V vsakem primeru je izvirna lupina Bourne sh
, zato morate biti bolj natančni in uporabiti kasnejšo lupino, če vaša skripta uporablja nekatere posebne lastnosti bash
(2. generacija, "Bourne Again sh") (testi [[ ]]
, polja, različne sladke stvari itd.). Tako se na sistemih, kjer bash ni nameščen, vaša skripta ne bo izvajala. Razumem, da bo o tej evoluciji morda nastala vznemirljiva trilogija filmov ... a to so lahko govorice.
Upoštevajte tudi, da se bash
, ko je priklican kot sh
, do neke mere obnaša kot standard POSIX sh
(o tem glejte tudi dokumentacijo GNU).
To je res odvisno od tega, kako pišete skripte bash. Če je vaš /bin/sh
simlinkiran na bash, ko se bash prikliče kot sh
, nekatere funkcije niso na voljo.
Če želite funkcije, ki niso značilne za bash in niso povezane s sistemom OSIX, uporabite #!/bin/bash