Debian e Ubuntu sono passati al trattino (iirc) a causa di un paio di cose. Prima di tutto, Bash è diventato grande nel corso degli anni. In effetti, il /bin/bash
binario sul mio sistema Ubuntu 8.04 è quasi dieci volte (!) Grande quanto /bin/dash
. Ora, questo non ha molta importanza per l'uso quotidiano della shell, ma è importante nelle seguenti situazioni:
- Dash è molto più piccolo e quindi si carica più velocemente, il che è un vantaggio per init-script. Se devi avviarne molti, caricando Dash anziché Bash ogni volta, acceleri notevolmente le cose.
- A causa delle dimensioni più ridotte di Dash, Debian e Ubuntu sono in grado di radere un grosso pezzo delle dimensioni del loro initrd, lasciando più spazio per altre cose (e ancora, accelerando le cose).
Il rovescio della medaglia dell'uso di Dash invece di Bash per lo scripting è che molte persone usano le cose sintattiche che solo Bash ha, i cosiddetti Bashisms . Esempi di bashismi sono sottostringhe, come questa:
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
E questo:
echo ${a#123}
4567890
Dash, d'altra parte, mira principalmente a essere conforme a POSIX (e non di più), ti darà un errore di sottostizione Bad se provi questo:
echo $SHELL
/bin/dash
# actually, it will read /bin/bash above, because if you just run dash
# it will not set the $SHELL variable :)
a=1234567890
echo ${a}
1234567890
echo ${a:3}
dash: Bad substitution
Ciò avrà importanza se usi /bin/sh
(e quindi dash
) come interprete per i tuoi shellscript e usi Bashisms in essi. Debian e Ubuntu hanno belle pagine wiki su Bashisms e perché sono cattive negli script shell in generale e negli script init in particolare. Pertanto, dovresti scegliere consapevolmente se hai bisogno /bin/sh
o /bin/bash
come interprete per la tua sceneggiatura.
Dash non dovrebbe essere usato come shell predefinita sui tuoi sistemi. Usa Bash per questo. Per la portabilità dei tuoi script, puoi usare Dash come interprete per aumentare le probabilità che gli script verranno eseguiti su altre versioni Linux e Unix.