Debian et Ubuntu sont passés à dash (iirc) en raison de plusieurs choses. Tout d'abord, Bash est devenu grand au fil des ans. En fait, le /bin/bash
binaire de mon système Ubuntu 8.04 est presque dix fois (!) Aussi gros que /bin/dash
. Maintenant, cela n'a pas beaucoup d'importance pour l'utilisation quotidienne du shell, mais cela a de l'importance dans les situations suivantes:
- Dash est beaucoup plus petit et se charge donc plus rapidement, ce qui est une aubaine pour les scripts d'initialisation. Si vous devez en démarrer beaucoup, le chargement de Dash au lieu de Bash à chaque fois, accélère considérablement les choses.
- En raison de la plus petite taille de Dash, Debian et Ubuntu sont capables de raser une assez grande partie de la taille de leur initrd, laissant plus de place pour d'autres choses (et encore une fois, accélérant les choses).
L'inconvénient d'utiliser Dash au lieu de Bash pour l'écriture de scripts, c'est que beaucoup de gens utilisent des subtilités syntaxiques que seul Bash possède, les soi-disant Bashismes . Des exemples de bashismes sont des sous-chaînes, comme ceci:
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
Et ça:
echo ${a#123}
4567890
Dash, d'autre part vise principalement à être conforme à POSIX (et pas plus que cela), vous donnera une erreur de mauvaise sous-station si vous essayez ceci:
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
Cela importera si vous utilisez /bin/sh
(et donc dash
) comme interprète pour vos scripts shells et utilisez des bashismes dans ceux-ci. Debian et Ubuntu ont de belles pages wiki sur les bashismes et pourquoi ils sont mauvais dans les scripts shell en général et les scripts init en particulier. Par conséquent, vous devez consciemment choisir si vous avez besoin /bin/sh
ou /bin/bash
comme interprète pour votre script.
Dash n'est pas censé être utilisé comme shell par défaut sur vos systèmes. Utilisez simplement Bash pour cela. Pour la portabilité de vos scripts, vous pouvez utiliser Dash comme interprète pour augmenter les chances que les scripts s'exécutent sur d'autres versions Linux et Unix.