Debian y Ubuntu cambiaron a dash (iirc) debido a un par de cosas. En primer lugar, Bash se ha vuelto grande con los años. De hecho, el /bin/bash
binario en mi sistema Ubuntu 8.04 es casi diez veces (!) Tan grande como /bin/dash
. Ahora, eso no importa mucho para el uso diario de shell, pero sí importa en las siguientes situaciones:
- Dash es mucho más pequeño y, por lo tanto, se carga más rápido, lo que es una bendición para los scripts de inicio. Si tiene que iniciar muchos de ellos, cargar Dash en lugar de Bash cada vez, acelera considerablemente las cosas.
- Debido al tamaño más pequeño de Dash, Debian y Ubuntu pueden reducir una gran parte del tamaño de su initrd, dejando más espacio para otras cosas (y de nuevo, acelerando las cosas).
La desventaja de usar Dash en lugar de Bash para las secuencias de comandos es que muchas personas usan sutilezas sintácticas que solo Bash tiene, los llamados Bashisms . Ejemplos de Bashisms son subcadenas, como esta:
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
Y esto:
echo ${a#123}
4567890
Dash, por otro lado, tiene como objetivo principal ser compatible con POSIX (y no más que eso), le dará un error de mala subtición si intenta esto:
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
Esto importará si usa /bin/sh
(y por lo tanto dash
) como intérprete para sus shellscripts y usa Bashisms en ellos. Debian y Ubuntu tienen buenas páginas wiki sobre Bashisms y por qué son malas en shellscripts en general y init-scripts en particular. Por lo tanto, debe elegir conscientemente si necesita /bin/sh
o /bin/bash
como intérprete para su guión.
No se supone que Dash se use como shell predeterminado en sus sistemas. Solo usa Bash para eso. Para la portabilidad de sus scripts, puede usar Dash como intérprete para aumentar las probabilidades de que los scripts se ejecuten en otros sabores de Linux y Unixes.