O Debian e o Ubuntu mudaram para o dash (iirc) por causa de algumas coisas. Primeiro de tudo, Bash se tornou grande ao longo dos anos. Na verdade, o /bin/bash
binário no meu sistema Ubuntu 8.04 é quase dez vezes maior que o /bin/dash
. Agora, isso não importa muito para o uso diário do shell, mas importa nas seguintes situações:
- O Dash é muito menor e, portanto, é carregado mais rapidamente, o que é um benefício para os scripts de inicialização. Se você precisar iniciar muitos deles, carregar o Dash em vez do Bash a cada vez acelera consideravelmente as coisas.
- Devido ao tamanho menor do Dash, o Debian e o Ubuntu são capazes de cortar uma grande parte do tamanho do initrd, deixando mais espaço para outras coisas (e, novamente, acelerando as coisas).
A desvantagem de usar o Dash em vez do Bash para scripts é que muitas pessoas usam sutilezas sintáticas que somente o Bash possui, os chamados Bashisms . Exemplos de Bashisms são substrings, como este:
echo $SHELL
/bin/bash
a=1234567890
echo ${a}
1234567890
echo ${a:3}
4567890
echo ${a:3:1}
4
E isto:
echo ${a#123}
4567890
O Dash, por outro lado, visa principalmente ser compatível com POSIX (e não mais do que isso), fornecerá um erro de subestação incorreto se você tentar o seguinte:
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
Isso será importante se você usar /bin/sh
(e, portanto dash
) como intérprete para seus shellscripts e usar Bashisms neles. O Debian e o Ubuntu têm boas páginas wiki sobre Bashisms e por que eles são ruins em shellscripts em geral e init-scripts em particular. Portanto, você deve escolher conscientemente se precisa /bin/sh
ou /bin/bash
como intérprete para o seu script.
O Dash não deve ser usado como o shell padrão em seus sistemas. Basta usar o Bash para isso. Para portabilidade de seus scripts, você pode usar o Dash como intérprete para aumentar as chances de os scripts executarem em outros tipos de Linux e Unixes.