Eu pensei que /bin/sh
era um link simbólico para a minha concha de escolha. Eu sempre usei bash
, então assumi que /bin/sh
isso apontaria /bin/bash
. Acontece, porém, que ele aponta /bin/dash
.
Fica mais engraçado. Começo dash
e faço echo $SHELL
e ele imprime /bin/bash
(então são basicamente os mesmos?). No entanto, a página de manual de dash
é completamente diferente da página de manual de bash
(portanto, elas não são as mesmas?).
echo $SHELL
impressões/bin/bash
é porque essa variável é definida para o shell padrão que começa quando você entra em vez do shell atual você está executando. Inicie o ksh ou zsh a partir de um prompt do Bash eecho $SHELL
continuará dizendo/bin/bash
. Useps
para ver o que está em execução no momento.Respostas:
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: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:
E isto:
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:
Isso será importante se você usar
/bin/sh
(e, portantodash
) 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.
fonte
/bin/bash
; Muitos sistemas não-Linux possuemsh
shells reais, que nem sequer são compatíveisbash
.echo ${a#123}
não é um basismo, é parte da especificação de expansão do parâmetro POSIX. pubs.opengroup.org/onlinepubs/009695399/utilities/… Você não obtém os Bash mais avançados do estilo sed, os posix são do estilo substring + caracteres simples de expansão. O que significa, POSIX também permiteecho ${a#*6}
Dê uma olhada aqui: https://wiki.ubuntu.com/DashAsBinSh talvez Isso ajude.
fonte
dash é uma substituição leve do bash, supondo que você use o ubuntu, que mudou para ele há alguns anos atrás.
Não é excessivamente bom, imho. http://forums.debian.net/viewtopic.php?f=20&t=45116
fonte
Como nem todas as conchas são definidas
$SHELL
quando executadas, você descobre seu shell atual com:Se der um erro, é csh, caso contrário, foi com o que
argv[0]
você foi chamado, que normalmente é o shell, talvez com um-
hífen à esquerda , para indicar que é um shell de logon.Isso não é garantido , pois
argv[0]
está sob o controle do processo de chamada, mas na prática é a abordagem mais confiável.fonte