O que é / bin / traço?

24

Eu achei que /bin/sh foi um link simbólico para o meu shell de escolha. Eu sempre usei bash , então eu assumi que /bin/sh apontaria para /bin/bash . Acontece, no entanto, que aponta para /bin/dash .

Isso fica mais engraçado. Eu começo dash e faço echo $SHELL e ele imprime /bin/bash (então eles são basicamente os mesmos?). No entanto, a página de manual de dash é completamente diferente da página de manual de bash (então eles não são iguais?).

    
por aioobe 21.10.2010 / 07:44

4 respostas

41

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.

    
por 21.10.2010 / 07:59
4

Dê uma olhada aqui: link talvez ajude.

    
por 21.10.2010 / 07:45
1

dash é um substituto leve do bash, supondo que você use o ubuntu que mudou para ele há alguns anos.

Não é bom demais, imho. link

    
por 21.10.2010 / 07:46
0

Como nem todos os shells definem $SHELL quando executados, você descobre seu shell atual com:

echo $0

Se ocorrer um erro, é csh; caso contrário, é o argv[0] com o qual você foi invocado, que normalmente é o shell, talvez com um% html de traço principal, para indicar que é um shell de login.

Isso não é garantido , pois - está sob o controle do processo de chamada, mas é na prática a abordagem mais confiável.

    
por 05.01.2011 / 09:53