Percebi que basicamente nenhum sistema com o qual trabalhei tem /bin/sh
um executável real. É sempre um link simbólico para dash
, bash
no modo POSIX, ou algo semelhante.
Por quê? Quais são as desvantagens de usar o verdadeiro, original /bin/sh
? (Velocidade? Licenciamento?)
sh
vinculadasksh
?ksh
.bash
IIRC.sh
é baseado em um padrão, o que significa que podemos ter várias implementações que se comportarão de maneira clara e especificada, desde que você use a sintaxe padrão em seu script.Respostas:
Eu acho que falta de recursos - sem histórico de comandos, sem redirecionamento sofisticado, sem edição de linha de comando. O BSD introduziu
csh
o shell C por esses motivos. Outro fator é que o Bourne Shell original estava disponível apenas recentemente em código aberto . A menos que você o licencie, você não poderá distribuí-lo. Isso o colocou fora do alcance de distribuições gratuitas e o tornou ideologicamente desagradável para outras distribuições e * BSDs.Mas o código está disponível agora. Você pode dar uma olhada, compilar, dar uma volta.
fonte
sh
é exatamente igual ao uso,bash
exceto pelo fato de ser: mais lento, os programas são mais longos e mais difíceis de manter.sh
comando execute um shell compatível com POSIX, o que o shell Bourne herdado não é. Embora o POSIX não exijash
estar/bin/sh
, esse é o diretório mais lógico para ele.sh
, não possui expansão de til e braçadeira, alguns componentes internos estão ausentes (por exemplo ,pushd
epopd
,select
) sem expansão aritmética. Muitas variáveis estão ausentes, por exemploPIPESTATUS
.A afirmação na sua pergunta está incorreta. O Solaris até a versão 10 está fornecendo o verdadeiro shell Bourne legado como
/bin/sh
. Isso foi feito para não quebrar a compatibilidade com scripts antigos que podem falhar com um shell diferente. Porém, essa escolha foi muito frustrante.A maioria, se não todas as versões restantes do Unix e do Unix, incluindo o Solaris 11, fornece um shell compatível com POSIX,
/bin/sh
porque o POSIX exige osh
comando para iniciar um shell POSIX, não o shell Bourne herdado que não é compatível./bin/sh
é geralmente :ksh88
ouksh93
nas implementações comerciais do Unixbash
emOS/X
(embora costumava serzsh
)ash
oupdksh
derivado em outroBSDs
bash
oudash
em distribuições Gnu / Linux.Não é necessariamente um link, mas pode ser um executável real em muitos sistemas, exceto no Gnu / Linux.
Curiosamente, apesar do que afirma a resposta mais votada para sua pergunta, não é a falta de recursos que leva os desenvolvedores de distribuição a instalar algo diferente do shell Bourne herdado,
/bin/sh
mas o desejo de ser o mais compatível possível com POSIX, ou seja, se comportar como um Unix como OS. O fato de o shell POSIX ter mais recursos do que o shell Bourne herdado é apenas um efeito colateral desse objetivo de conformidade padrão.Também é um fato que algumas conchas
bash
se comportam de maneira diferente quando chamadassh
, e isso remove principalmente os recursos do shell, e não o contrário.fonte
Até onde eu sei, o shell Bourne original não pôde ser usado pelos BSDs e pelo projeto GNU, por causa de sua licença.
Naquela época, o Unix original não tinha licença e o projeto GNU precisava de um shell que estivesse sob a GPL, para que eles usassem o bash.
O mesmo se aplica ao BSD4, o pai de todos os BSDs. Graças ao processo da AT&T, eles precisaram reescrever todas as fontes do Unix original, incluindo o shell Bourne.
Do FreeBSDs
man sh
Portanto, ambos os projetos foram forçados a não usar o shell Bourne e se contentar com um verdadeiro shell de código aberto.
fonte
Houve outros problemas. O Bourne Shell usou sbrk () em vez de malloc () e isso não o tornou muito portátil.
Depois que o Bourne Shell se tornou OpenSource via OpenSolaris, criei uma versão portátil hafway e, posteriormente, uma versão realmente portátil, substituindo sbrk () por malloc () com a ajuda de Geoff Collyer (a mesma pessoa que ajudou a evitar sbrk () no Korn Shell).
A razão inicial pela qual fiz uma versão portátil do Bourne Shell é que gostei de disponibilizar o Editor de História que escrevi para o meu "bsh" entre 1982 e 1984 no Bourne Shell. Enquanto isso, eu portava a maioria das características únicas que escrevi para "bsh" para o Bourne Shell.
Isto é entre outros:
A página do manual on-line está em: http://schillix.sourceforge.net/man/man1/bosh.1.html As fontes fazem parte da caixa de ferramentas inteligente em:
https://sourceforge.net/projects/schilytools/files/
Eu recomendo usar: http://sourceforge.net/projects/schilytools/files/schily-2015-08-18.tar.bz2 ou uma versão mais recente.
PS Estou interessado em feedback
fonte
Ele está vinculado a shells que fornecem 100% de compatibilidade com versões anteriores . Você não perde nada do que o shell original possui, mas ganha mais recursos em cima dele. Não há desvantagem, então por que perder os novos recursos? Esta é a mesma razão pela qual
/bin/vi
geralmente está vinculado ao vim .fonte
bash
é muito, muito mais lento quedash
IFS=,; rm file1,file2,file3
removeria esses 3 arquivos no shell Bourne. Esse recurso (bobo) foi removido no POSIX sh. Existem dezenas de diferenças sutis que podem fazer com que um script escrito para o shell Bourne funcione de maneira diferente com um POSIX sh.