Er der noget Bash
-shebang objektivt set bedre end de andre til de fleste formål?
#!/usr/bin/env bash
#!/bin/bash
.#!/bin/sh -
Jeg kan svagt huske at jeg for længe siden hørte at tilføje en bindestreg i slutningen for at forhindre nogen i at sende en kommando til dit script, men jeg kan ikke finde nogen detaljer om det.
Du bør bruge #!/usr/bin/env bash
af hensyn til portabilitet: forskellige *nixe placerer bash
forskellige steder, og at bruge /usr/bin/env
er en løsning for at køre den første bash
, der findes i PATH
. Og sh
er ikke bash
.
/bin/sh
er normalt et link til systemets standard shell, som ofte er bash
, men på f.eks. Debian-systemer er det den lettere dash
. Uanset hvad, så er den originale Bourne shell sh
, så hvis dit script bruger nogle bash
(2. generation, "Bourne Again sh") specifikke funktioner ([[[ ]]
tests, arrays, forskellige sukkerholdige ting osv.), så bør du være mere specifik og bruge den senere. På denne måde vil dit script ikke køre på systemer, hvor bash ikke er installeret, på denne måde vil dit script ikke køre. Jeg kan forstå at der kan være en spændende trilogi af film om denne udvikling... men det kan være rygter.
Bemærk også, at når det fremkaldes som sh
, så [opfører bash
sig til en vis grad som POSIX-standard sh
(se også GNU-dokumentationen om dette).
Det afhænger i virkeligheden af, hvordan du skriver dine bash-scripts. Hvis din /bin/sh
er symlinket til bash, når bash bliver kaldt som sh
, er nogle funktioner ikke tilgængelige.
Hvis du vil have bash-specifikke, ikke-POSIX-funktioner, skal du bruge #!/bin/bash