Eu apenas comecei a aprender os fundamentos do Unix e me pergunto por que existem tantas conchas em um sistema como o Unix. Do livro Programação Avançada no Ambiente Unix :
Um shell é um intérprete de linha de comando que lê a entrada do usuário e executa comandos. A entrada do usuário em um shell normalmente é do terminal (um shell interativo) ou, às vezes, de um arquivo (chamado de script do shell).
E então o livro continua listando vários programas de shell como Bourne shell, Bourne-again shell, Cshell, etc. Minha pergunta é basicamente por que precisamos de várias conchas?
Respostas:
A maioria dos shells usados em ambientes UNIX modernos deve estar em conformidade com a especificação sh do POSIX. O POSIX sh é derivado do shell Korn original (ksh88), que por sua vez é derivado do shell Bourne anterior, mas o POSIX sh especifica apenas um pequeno subconjunto da funcionalidade do mesmo ksh88. Um shell que implementa apenas o requisito mínimo está ausente de muitos recursos necessários para escrever todos os scripts, exceto o mais trivial, de maneira segura e razoável. Por exemplo, variáveis e matrizes locais são extras não padrão.
Portanto, o primeiro motivo é estender o shell com recursos extras. Conchas diferentes optam por se concentrar em coisas diferentes. Por exemplo, o Zsh se concentra em recursos interativos avançados, enquanto o ksh93 (o atual shell korn "original") se concentra em recursos e desempenho avançados de programação. Mesmo shells muito mínimos como o Dash adicionam pelo menos alguns extras não-padrão, como variáveis locais.
Recursos extras raramente são amplamente interoperáveis, se houver. A maior parte do conjunto de recursos do ksh88 é bastante interoperável, como a sintaxe de globbing estendida, mas com recursos não padrão, não há garantias e você deve saber realmente o que está fazendo para usá-los de maneira portátil.
A segunda razão é legada. Ainda existem muitos Unixes proprietários por aí que usam implementações não padronizadas antigas para o seu / bin / sh. Até recentemente, o Solaris ainda usava Bourne como sua armadilha e optou por manter o shell Heirloom em vez de atualizar para algo moderno. Esses sistemas geralmente vêm com shells diferentes para os quais você pode alternar, por exemplo, alterando sua variável PATH ou alterando shebangs em scripts individuais.
Então, para resumir. Existem vários shells, geralmente por padrão:
fonte
local
não seja POSIX ou Unix, ele é especificado e necessário no padrão Linux (LSB) e no padrão de política debian . Observe quees
é um acompanhamentorc
.mksh
originou como o Domínio Público Bourne Shell, que também foi escrito devido a motivos de licenciamento. (Estas questões ainda permanecem - licenciamento e portabilidade e tamanho foram os três fatores que me ajudaram a persuadir Google para incluir mksh com Android.)Porque as pessoas têm necessidades diferentes e é bom ter alternativas que atendam às suas necessidades na situação em questão. Um shell é apenas uma ferramenta por si só e deve ser substituível por qualquer outro na minha opinião. Esse é o poder do Unix / Linux, ao contrário do que o Microsoft Windows escolheu ser.
Da mesma forma ... Por que existem tantos editores de texto? Por que as pessoas desenvolvem um novo navegador se já existe um? Por que existem GNOME, KDE, Xfce, LXDE, E17, etc.?
fonte
COMMAND.COM
no DOS era substituível. No entanto, você costuma ter um sistema muito frágil devido às suposições de outros aplicativos (e outros usuários). Como resultado, existem poucas alternativas de sucesso paraCMD.EXE
. Um deles é o PowerShell, que tem a inércia da Microsoft em apoiá-lo. Outro exemplo é, estranhamente,bash
devido ao apoio decente da comunidade Cygwin, sem mencionar o pessoal do MinGW. Quanto aos gerenciadores de janelas, o Windows teve apenas um de cada vez, mas houve vários ao longo do tempo à medida que o próprio ambiente do Windows evoluiu.Resposta curta
Devido a uma história estranha de licenciamento, nenhuma entidade desenvolveu o Unix. Foi um processo comunitário em que voluntários e empresas participaram. Essas entidades nem sempre compartilham todas as suas ferramentas, então conchas separadas acontecem. Quando percebemos o quão contraproducente é isso, era tarde demais para unificar todas as conchas em uso. Em vez disso, foi feito um trabalho para garantir que todas essas conchas seriam (teoricamente) compatíveis entre si .
A resposta longa é complexa e está intimamente ligada à história do próprio Unix. Não há como conter uma única resposta nesta página, mas ela foi amplamente (mal) documentada. Você encontrará respostas mais detalhadas e precisas consultando a Web e livros sobre a história do Unix.
fonte
Existem diferentes shells pelas mesmas razões que diferentes navegadores da web: todo mundo tem uma preferência e alguns shells têm bagagem ou momento histórico. Cada um tem características e idiossincrasias diferentes.
fonte
Principalmente, história ...
Bourne foi desenvolvido como parte do SysV Unix (proprietário), enquanto o BSD usava
csh
... Mais tarde, o bash foi desenvolvido como uma alternativa de código aberto ao shell Bourne (e suas versões aprimoradas, como o ksh). Um shell tipo Bourne foi adotado no padrão POSIX. O ksh é compatível e o bash pode ser compatível.Os shells gostam
csh
etcsh
são muito mais fáceis de usar interativamente do que o shell Bourne original (que não possui conclusão de comando, etc.), mas são horríveis para scripts ...Em alguns ambientes, como sistemas embarcados baseados em Unix, recursos de script, tamanho e velocidade são mais importantes que recursos interativos, como a conclusão de comandos, e uma variante diferente dos shells costuma ser usada.
Para scripts portáteis, você deve usar uma variante Bourne compatível com POSIX e evitar extensões.
fonte