Er det noen Bash
shebang objektivt bedre enn de andre for de fleste bruksområder?
#!/usr/bin/env bash
#!/bin/bash
#!/bin/sh
#!/bin/sh -
Jeg husker vagt at jeg for lenge siden hørte at å legge til en bindestrek på slutten forhindrer at noen sender en kommando til skriptet ditt, men kan ikke finne noen detaljer om det.
Du bør bruke #!/usr/bin/env bash
for portabilitet: forskjellige *nixer plasserer bash
på forskjellige steder, og bruk av /usr/bin/env
er en løsning for å kjøre den første bash
som finnes på PATH
. Og sh
er ikke bash
.
/bin/sh
er vanligvis en lenke til systemets standardskall, som ofte er bash
, men på f.eks. Debian-systemer er det lettere dash
. Uansett er det originale Bourne-skallet sh
, så hvis skriptet ditt bruker noen bash
(2. generasjon, "Bourne Again sh") spesifikke funksjoner ([[ ]
tester, matriser, forskjellige sukkerholdige ting, etc.), bør du være mer spesifikk og bruke sistnevnte. På denne måten, på systemer der bash ikke er installert, vil skriptet ditt ikke kjøre. Jeg forstår at det kan være en spennende trilogi med filmer om denne utviklingen ... men det kan være rykter.
Merk også at bash
til en viss grad oppfører seg som POSIX-standarden sh
når den fremkalles som sh
(se også GNU-dokumentene om dette).
Det avhenger virkelig av hvordan du skriver bash-skriptene dine. Hvis /bin/sh
er symlinked til bash, når bash påkalles som sh
, er noen funksjoner utilgjengelige.
Hvis du vil ha bash-spesifikke, ikke-POSIX-funksjoner, bruker du #!/bin/bash
.