C'è qualche "Bash" oggettivamente migliore degli altri per la maggior parte degli usi?
#!/usr/bin/env bash
.#!/bin/bash
.#!/bin/sh
.#!/bin/sh -
Ricordo vagamente di aver sentito tempo fa che l'aggiunta di un trattino alla fine impedisce a qualcuno di passare un comando al tuo script, ma non riesco a trovare alcun dettaglio al riguardo.
Dovresti usare #!/usr/bin/env bash
per portabilità: diversi *nix mettono bash
in posti diversi, e usare /usr/bin/env
è un workaround per eseguire la prima bash
trovata nel PATH
. E sh
non è bash
.
/bin/sh
è di solito un collegamento alla shell predefinita del sistema, che spesso è bash
ma, ad esempio, nei sistemi Debian è la più leggera dash
. In ogni caso, la shell Bourne originale è sh
, quindi se il tuo script usa alcune caratteristiche specifiche di bash
(seconda generazione, "Bourne Again sh") (test [[ ]]
, array, varie cose zuccherose, ecc.), allora dovresti essere più specifico e usare la seconda. In questo modo, su sistemi dove bash non è installato, il tuo script non verrà eseguito. Capisco che ci possa essere un'eccitante trilogia di film su questa evoluzione... ma potrebbe essere un sentito dire.
Si noti inoltre che quando evocato come sh
, bash
in qualche misura si comporta come lo standard POSIX sh
(si veda anche la documentazione GNU su questo).
Dipende davvero da come scrivi i tuoi script bash. Se il tuo /bin/sh
è collegato in modo simbolico a bash, quando bash è invocato come sh
, alcune caratteristiche non sono disponibili.
Se vuoi caratteristiche specifiche di bash e non-POSIX, usa #!/bin/bash
.