O Bash é usado por padrão em todas as distribuições Linux que tentei, em vez de alternativas como o Z shell (zsh). Existe uma razão técnica ou histórica para isso?
O Bash é usado por padrão em todas as distribuições Linux que tentei, em vez de alternativas como o Z shell (zsh). Existe uma razão técnica ou histórica para isso?
Respostas:
História (adquirida não por meio de pesquisa, mas por passar muito tempo saindo com o pessoal do Bell Labs):
No começo (se você considera o começo como Unix Versão 7), era o shell Bourne. Steve Bourne foi o primeiro a mostrar que o shell que controlava a interação do usuário poderia ser um programa do usuário e não uma parte especial do sistema operacional. Um avanço histórico. O próprio shell era relativamente limpo para scripts, mas não possuía edição de linha de comando ou controle de tarefas. A Introdução de Bourne ao Shell Unix ainda é útil para usuários iniciantes hoje.
Edit : Eu ignorei algumas "pré-histórias" de Ken Thompson e John Mashey, também de Multics. Tenho certeza de que Bourne estava ciente de todo esse trabalho (ele estava no mesmo laboratório, em 1127, na Bell Labs), mas a concha de Bourne era definitiva e o trabalho anterior teve pouca influência, exceto como interpretado por Steve Bourne. Por exemplo, embora Ken tenha posteriormente escrito o compilador do Plano 9 C e tenha sido muito influente no Plano 9, o artigo de Tom Duff sobre o shell do Plano 9 (rc) menciona apenas o shell de Bourne, e não o de Thompson.
O shell é apenas um programa de usuário, para que qualquer um possa escrever um. Como a versão 7 Unix estava sendo criada em Nova Jersey, o Berkeley Unix estava sendo criado na Califórnia. Bill Joy em Berkeley escreveu csh
, o shell C. Joy adicionou controle e histórico do trabalho e, posteriormente, edição da linha de comando, mas não estava ciente do trabalho de Bourne e, portanto, baseou sua linguagem no shell Thompson (que eu considerava "pré-histórico" no item anterior). A comunidade Unix adorava o controle do trabalho, mas também amava a linguagem de Bourne. Para uma polêmica não particularmente boa contra a linguagem csh, consulte Programação Csh considerada prejudicial . Por um tempo, muitas pessoas usavam csh
interativamente seus recursos de controle de tarefas e histórico, mas usavam os de Bourne sh
para escrever scripts. Esta situação era menos do que ideal.
Edit : Obrigado a DigitalRoss por me esclarecer a cronologia de csh
. Desde que recebi minha educação de pessoas que se referem ao BSD como "a heresia de Berkeley", fiquei sem fatos.
Dave Korn, da Bell Labs, fez uma brilhante reengenharia da concha Bourne para produzir a concha Korn (ksh). Era totalmente compatível com o shell Bourne, sh
mas fornecia uma carga de melhorias inestimáveis. ksh
tornou-se a base de um padrão POSIX e foi enviado com o software Sun. (Isso apesar do fato de Bill Joy ter deixado Berkeley para ajudar a fundar a Sun e ser um dos líderes de software.)
Bell Labs e AT&T estupidamente falham em criar ksh
código aberto. ksh88
é amplamente utilizado, mas ter fontes não é legal. Certas pessoas se tornam tão viciadas que se tornam criminosas digitais.
Edit : Isso foi realmente tão estúpido? Difícil de saber. Berkeley já estava dando o Unix, e outras empresas logo se seguiriam, mas ainda era a época em que o Corporate Masters acreditava em cobrar pelo Unix. Mas os resultados: a AT&T Unix está morta, depois de ter sido vendida para várias partes várias vezes. O BSD e seus derivados estão vivos e bem, mas essas coisas novas, chamadas "Linux" e "GNU", têm uma enorme fração de participação que antes pertencia ao Bell Labs.
A Free Software Foundation faz uma implementação de "sala limpa", a partir do zero, de um shell POSIX, atualizando todas as idéias de Dave Korn, mais no estilo usual da FSF, adicionando novos recursos próprios, como a conclusão programável. Eles chamam de concha "Bourne again", ou bash
.
Em meados da década de 90 ksh93
, a fonte aberta da AT&T , mas já é tarde para uma adoção generalizada. O contrato de licença é estranhamente fora do padrão. bash
e ksh
divergem, e ksh
não consegue proporcional quota de mercado com o seu lugar na história.
Lições:
O primeiro produto adequado ao mercado vence (sh).
As pessoas adoram novos recursos (controle de tarefas, conclusão de comandos), mas as amam ainda mais quando seus scripts antigos continuam funcionando.
Edit : Professores de engenharia devem deixar a história para historiadores da ciência :-)
Bash tem duas coisas completamente diferentes.
É uma concha fina. É um dos talvez 2 shells (o outro é o zsh) que integra alguns dos csh
recursos interessantes , como a !
substituição do histórico na sintaxe posix. Tem muitas extensões, incluindo matrizes.
É o shell FSF / GNU. No mundo do código aberto, isso oferece uma espécie de cache.
Devo acrescentar também que nem sempre é o padrão. ash
é frequentemente usado como / bin / sh para que, embora bash
possa ser o shell interativo, ash
seja o shell "basta executar o arquivo de comando". Isso ocorre porque ash
é menor e mais rápido, e contém os recursos do posix, por isso é um subconjunto adequado. Usar ash
como um shell interativo às vezes é problemático. No NetBSD, por exemplo, ele funciona bem, porque é construído com todos os recursos. É um tipo de shell único, enquanto bash
é um pacote externo. Mas no Linux ash
é geralmente considerado não interativo, então eles o compilam sem o histórico e sem a (importante) edição de linha na teoria de que ele é usado apenas para executar esses gnu configure
scripts enormes .
A verdadeira história da concha
ATUALIZAÇÃO: Há um histórico impreciso do shell sendo copiado de um lugar para outro na Web, e as pessoas estão compreensivelmente acreditando nisso. Vou tentar fornecer uma versão precisa e fornecer alguns links para substancia-la aqui.
<, >, >>, |, &
mas tinha apenas uma goto
sintaxe de controle simples através de um programa externo que buscava a entrada padrão. Não havia scripts shell complexos na época. Os shells posteriores abririam a entrada de comando em um fd separado. Pode parecer simples hoje, mas no filme de terror que era a computação dos anos 70, era a melhor coisa do mundo. Acredite ou não, esse shell antigo tem seu próprio fluxo no twitter hoje e, é claro, uma home page .csh
, escrita (como foi vi
) por Bill Joy na UCB. Isso aconteceu antes da GNU readline e do NetBSD editline, então deve ter parecido perfeitamente razoável fazer história com a !
sintaxe. O Csh adicionou a maioria dos recursos de shell de hoje, mas com a sintaxe do csh. O csh não alterou nenhuma sintaxe , gratuitamente ou de outra forma. Ele era realmente compatível com o shell Thompson e originalmente incluía o código-fonte TS.osh
e csh
ficou popular durante algum tempo . Não havia internet e o SW era licenciado, portanto, nesse ambiente, é possível que Stephen Bourne não soubesse do shell de Joy e certamente Joy não soubesse de Bourne. É possível que os dois cartuchos tenham se conhecido quando a UCB recebeu um VAX e um pré-lançamento do agora esquecido Unix / 32V . Lembro-me de Bill reclamando da alocação de memória. Observe que os dois shells eram compatíveis com o shell V6, eles simplesmente estenderam a sintaxe em diferentes direções. ksh
. Eventualmente, csh
tinha código fonte semi-disponível, mas foi preso em um processo entre a AT&T e a Universidade da Califórnia . Ainda assim, esses foram os dias de glória do BSD Unix, pois empresas sofisticadas que podiam pagar a taxa de US $ 50.000 comprariam a licença da AT&T, mas instalariam as distribuições do BSD 4.x, e as universidades a adquiriam de graça.csh
sintaxe quanto a sintaxe do shell Bourne, e alguns fundiram os dois. Você tinha, pelo menos tcsh
, zsh
, bash
, e ash
. A sintaxe Bourne era "oficial", fazendo parte dos lançamentos da AT&T, mas naqueles dias o BSD era bastante importante, e a Sun, inicialmente o BSD, distribuía uma quantidade razoável do SW Unix que o mundo encontrava./bin
e /sbin
depender /usr
disso, está quebrado e precisa ser corrigido; eles devem depender apenas de bibliotecas no /lib
. login
Precisa apenas de PAM; a "API mais recente" que requer bibliotecas dinâmicas seria NSS. "Tendência para"? O NetBSD 2.0 já mudou para um totalmente dinâmico /bin
e /sbin
há 5 anos, o FreeBSD 5.2 ainda mais longo e o Linux ... bem, isso varia de acordo com a distribuição, mas isso já faz um bom tempo.
Para adicionar ao que @DigitalRoss disse
Porque o Linux é apenas o Kernel (e o suporte necessário), enquanto o GNU fornece (ou forneceu) todos os clones básicos do software Unix que tornam o que chamamos de "Linux" utilizável. Bash é o shell do projeto GNU escrito como um clone do shell Bourne mais antigo (sh) do Unix Versão 7.
De acordo com uma pesquisa do unix.com, não está muito longe do ksh.
/ bin / sh 83 8,96%
/ bin / csh 36 3,89%
/ bin / ksh 370 39,96%
/ bin / tcsh 36 3,89%
/ bin / bash 401 43,30%
O Bash é amplamente aceito devido ao seu rico conjunto de recursos. Ele também adota recursos de outras conchas, como cascas C e cascas Korn. Por favor, dê uma olhada neste conjunto de recursos.
Como 'bash' é 100% compatível com 'sh / ksh' e 'ksh' é o shell POSIX.
Portanto, se você deseja um sistema compatível com POSIX e está no Linux, usa o bash.
Se você está em um unix comercial, geralmente obtém o ksh como o shell padrão (em algum momento simplesmente sh antigo). Por alguma razão, a Sun ainda assume o padrão flakey csh c-shell.
A vantagem é a portabilidade que um .sh escrito para hp-ux ou AIX tem uma boa chance de executar como um 'bash' do linux sem nenhuma alteração.
E para adicionar a todas as outras respostas: zsh
não é para ser compatível com versões anteriores. Você provavelmente pode configurá-lo para que seja compatível, mas depois está perdendo seus recursos.
Eu uso zsh
como meu shell interativo regular, mas bash
/ me dash
parece mais sensato como uma linguagem de script de shell; eles fazem menos mágica e são mais previsíveis ... isso é mais importante para mim quando escrevo um script que deve funcionar por vários anos.
Apenas para confundir, o sh
comando às vezes é apenas um link simbólico para outro programa shell, como ash
, bash
ou dash
.
O Ubuntu costumava vinculá-lo bash
, pois bash
é projetado para executar qualquer script de shell Bourne compatível.
Recentemente, porém, o Ubuntu mudou para o sh
link para dash
. dash
foi projetado para executar bash
scripts (e, portanto, também sh
scripts), mas foi projetado para ser usado apenas para scripts, portanto, carece dos recursos interativos do bash
. Isso o torna menor e (talvez) mais rápido.