O Debian e o Ubuntu mudaram para o traço (iirc) por causa de algumas coisas. Primeiro de tudo, Bash se tornou grande ao longo dos anos. De fato, o binário /bin/bash
no meu sistema Ubuntu 8.04 é quase dez vezes (!) Tão grande quanto /bin/dash
. Agora, isso não importa muito para o uso diário de shell, mas importa nas seguintes situações:
- O Dash é muito menor e, portanto, carrega mais rápido, o que é um benefício para os scripts init. Se você tiver que iniciar muitos deles, carregar o Dash em vez do Bash a cada vez, acelera consideravelmente as coisas.
- Por causa do tamanho menor do Dash, o Debian e o Ubuntu são capazes de remover um grande pedaço do tamanho de seu initrd, deixando mais espaço para outras coisas (e novamente, acelerando as coisas).
A desvantagem de usar o Dash em vez do Bash para o script, é que muitas pessoas usam sutilezas sintáticas que só 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 isso:
echo ${a#123}
4567890
Dash, por outro lado, tem como principal objetivo ser compatível com POSIX (e não mais do que isso), você receberá um erro Substituições incorretas se tentar isso:
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 o interpretador para seus scripts e usar os Bashisms neles. O Debian e o Ubuntu têm boas páginas wiki sobre os Bashisms e porque eles são ruins em shellscripts em geral e init-scripts em particular. Portanto, você deve escolher conscientemente se precisa de /bin/sh
ou /bin/bash
como intérprete para o seu roteiro.
O Dash não deve ser usado como o shell padrão em seus sistemas. Apenas use Bash para isso. Para a portabilidade de seus scripts, você pode usar o Dash como o interpretador para aumentar as chances de execução dos scripts em outros tipos de Linux e Unixes.