Por que o bash é o shell padrão na maioria dos sistemas operacionais?

38

Por que o bash é o shell padrão na maioria dos sistemas operacionais (Ubuntu, Fedora, OSX etc.)? Por que muitos usuários avançados usam principalmente o zsh? Se é tão bom, por que não é o padrão?

Eu uso os dois, não vejo diferença, pois todas as minhas tarefas são simples :)

Talal
fonte
5
Tudo é uma curva gaussiana: se é verdade que os usuários mais avançados usam ksh, também é verdade que a maioria das pessoas usa um shell diferente, e isso por si só explicaria por que kshnão é o shell padrão. No entanto, acho que não é esse o motivo, vamos aguardar uma resposta matadora que tenho certeza de que essa pergunta receberá.
kos
1
Na verdade, eu acredito que o Ubuntu usa hífen como shell padrão ...
Bakuriu
1
Esta tem uma boa resposta, voto que deixamos em aberto.
Seth

Respostas:

33

Eu li isso e a conclusão parece ser que é o shell padrão do GNU (usado pela maioria dos sistemas operacionais Linux) e, portanto, simplesmente vem empacotado como parte do GNU, além de ter 20 anos de desenvolvimento por trás dele. estável e bem arredondado, é simplesmente o melhor em todos os aspectos, atendendo às necessidades de todos, exceto dos usuários mais avançados.

Para saber mais, leia Por que o bash é padrão no Linux? (a mesma pergunta no Unix e Linux).

Só para adicionar um pouco mais a isso, existem muitas outras conchas para tentar, se você estiver interessado, aqui estão algumas desta resposta :

  • O Zsh possui instalações interativas mais avançadas, mas algumas peculiaridades quando se trata de scripts (menos agora do que antigamente). No início e meados da década de 1990, quando o Linux estava em sua infância, o zsh era praticamente desconhecido.

  • O Ksh era o padrão de fato nas unidades comerciais desde meados da década de 1980, mas era um software proprietário até 2000, portanto não é uma opção no Linux. Além disso, o ksh tinha recursos de edição de linha de comando abaixo da média, em comparação com o bash.

  • Pdksh , um clone livre do ksh, teria sido uma opção, mas não era bem conhecido e tinha recursos ruins de edição de linha de comando. (O Pdksh não é mais um projeto muito ativo, embora ainda seja usado em alguns BSDs, agora que o ATT ksh é gratuito.)

  • Algumas distribuições instalam uma variante de cinzas como /bin/sh. Ash (com o que quero dizer qualquer família solta de conchas chamada ash) é projetado para ser pequeno e rápido, sem recursos interativos (apenas para editar scripts). O renascimento das cinzas é relativamente recente; nos anos 90, as variantes existentes careciam de muitos recursos.

  • O Tcsh era o shell interativo mais avançado até o zsh aparecer, mas é incompatível com sh e não é tão bom com scripts .

Mark Kirby
fonte
1
Quando você copia e cola coisas de outros lugares, você deve indicar claramente que esse é o caso.
Muru
1
@muru Eu forneci o link para o post original, mas vejo o seu ponto de vista de que poderia ser mais claro.
Mark Kirby
Qual é a fonte do seu comentário que o zsh tem algumas peculiaridades em relação aos scripts? Não importa, vejo que o comentário veio de outro lugar.
Scooter
1
Você também tem peixe (que é incompatível com a sintaxe sh).
Léo Lam
1
Você explicaria o que era deficiente na edição do shell do Korn? Sempre pareceu funcionar bem para mim, mesmo nos anos 90.
Jonathan Leffler
9

O Bourne Shell ( sh no passado) do ramo AT&T do Unix foi aprimorado e substituído pelo Korn Shell, ksh . O ksh também saiu do AT&T Bell Labs e não era da GPL (a versão atual é a Licença Pública do Eclipse). O C-shell, csh , saiu da versão Berkeley do Unix e também não era GPL (licença BSD) e também usava sintaxe diferente da sh. O Z-shell, zsh é uma melhoria no sh, mas não no GPL (licença semelhante ao MIT). O Bash foi uma melhoria no sh, usou a GPL e o GNU. Apenas com a licença Bash provavelmente teria sido a escolha para um sistema operacional GPL. Particularmente com uma concha sendo uma parte essencial de uma distribuição.

Mas o Bash também era um projeto GNU, dando a ele, acho, um desenvolvimento mais ativo e facilitando as contribuições do que um produto herdado do Berkeley Unix ou da AT&T Unix. Pode-se argumentar muito bem que o zsh é e tem sido um shell melhor que o Bash, mas não o suficiente para superar sua licença diferente e o status do projeto não-GNU.

Quando as distros do Linux apareceram pela primeira vez e escolheram seu shell padrão (no início dos anos 90), não havia github (2008) ou mesmo um SourceForge (1999). Nesse ponto, acho que os projetos GNU tinham uma vantagem real sobre os projetos não-GNU em serem notados, desenhar e incluir novos desenvolvedores. Portanto, as distros podem considerar o Z-shell melhor, mas também esperam que o Bash receba um bom suporte e manutenção daqui para frente e também tenham mais recursos adicionados a ele, permitindo que ele atinja o zsh.

Agora que o Bash tem anos de status padrão, tornou-se um padrão defacto, com livros escritos sobre isso. Há um livro que cobre o Bash e o Z-shell , mas nenhum livro que o cobre exclusivamente, enquanto há vários que o fazem para o Bash.

E, nesse ponto, se as distros alterassem o padrão para atualizações de um sistema existente, as configurações seriam interrompidas, pois alguns arquivos de inicialização têm nomes diferentes (por exemplo, .bashrc versus .zshrc) e o conteúdo dos arquivos pode ter sintaxe incompatível. Portanto, eles ficariam muito relutantes em fazer isso, deixando novos downloads com o zsh como padrão e as atualizações com o bash. Dois padrões diferentes para a mesma distribuição são algo que eles provavelmente não querem ter suporte e os usuários / empresas também não querem lidar com isso.

Lambreta
fonte
1

As linguagens de shell do Unix são todas feias. Alguns particularmente ( csh), outros talvez um pouco menos ( ksh? Na verdade, eu não sei), mas realmente quando se trata de aspectos como legibilidade e rigidez para grandes projetos, nenhum deles pode se aproximar de linguagens de uso geral bem projetadas, como Python, C # ou Haskell. Então, quando você quiser algo sólido, nunca escolherá nenhum dos sabores de casca.

Você os escolhe quando deseja fazer rapidamente coisas simples. Para isso, você precisa:

  • Sintaxe concisa e consistência suficiente para que você possa memorizá-la (é difícil procurar operadores abreviados). É muito importante se o seu shell estiver instalado em qualquer lugar, porque você realmente prefere não memorizar mais de um desses monstros kludge.
  • Bons recursos interativos, para que você possa invadir o terminal e fazer as coisas funcionarem sem precisar alternar entre vários arquivos de script.
  • A capacidade de pegar qualquer trecho de script de qualquer lugar e fazê-lo funcionar. sha compatibilidade é uma grande vantagem aqui e, mais uma vez, quanto mais popular, melhor.

Então veja, a popularidade é um ponto maior nessas linguagens shell do que nas linguagens de uso geral. Portanto, mesmo que kshseja um pouco “melhor” como uma linguagem em si, não há realmente muita vantagem em usá-la se bashfor um pouco mais popular (o que era, no setor relevante, desde que foi escolhida como padrão). para GNU).

As pessoas que fazem a troca são deliberadas e experientes o suficiente para lidar facilmente com a mudança para seu shell favorito. OTOH, um novato que é forçado a trabalhar com um shell menos popular ficará rapidamente confuso se pedir algo à Internet e ele não funcionar. Portanto, qualquer distro que não seja destinada apenas aos veteranos do Unix corre algum risco se fizer algo além bashdo padrão, um passo do qual relativamente poucas pessoas se beneficiariam (e apenas um pouco).

leftaroundabout
fonte
1
Qualquer linguagem que se preocupe com quantidades de espaço em branco não é "bem projetada", mas concordo que a popularidade é a chave.
Nagora
1
@ Nagora: as opiniões variam. FWIW, você sempre pode escrever Haskell com chaves e ponto-e-vírgula em vez de espaço em branco, e suponho que o Python tenha fallbacks semelhantes. Somente ninguém faz isso, porque o agrupamento baseado em indentação é incrível para facilitar a leitura.
precisa saber é o seguinte
1
  1. Estava lá quando era necessário
  2. Ele tem colírio para os olhos suficiente para que os usuários iniciantes possam passar uma semana personalizando seu prompt.
  3. Os casos de uso comuns são bons o suficiente (o mais comum é iniciar um único comando)
  4. Onde não é bom o suficiente perl, python e lua podem ocupar a folga.
  5. perl faz uma terrível casca interativa
  6. embora fish, ksh ou zsh possam, teoricamente, ser uma casca melhor, não há uma melhoria suficiente para eu me incomodar quando o perl funciona tão bem ou a portabilidade é um problema, por isso estou mirando o dash de qualquer maneira.
hildred
fonte
0

"Massa crítica" é a resposta principal, IMO. O Bash não é apenas para trabalhos de linha de comando, é para scripts e há um número enorme de scripts do Bash por aí. Não importa quão melhor seja agora uma alternativa para a interação, a necessidade de poder "plug and play" apenas esses scripts supera essas vantagens. Dessa forma, o único shell que pode derrubar o Bash de forma realista agora é completamente compatível com versões anteriores e o candidato mais provável a isso é ... a próxima versão do Bash.

Nagora
fonte
1
Você pode usar todo e qualquer script bash, independentemente do seu shell padrão. É isso que o she-bang (#! / Bin / bash) significa na parte superior do script.
Panther
1
@ bodhi.zazen Enquanto o shell bash existir no sistema. Conheço pelo menos uma versão do Solaris que não inclui o bash.
Tulains Córdova
@ bodhi.zazen Há um custo mental em ter que alternar entre duas conchas - uma para interação e outra para scripts. Geralmente não vale a pena.
Nagora
1
@ Nagora Qual é o custo mental de executar um script?
kos
@ kos se você estiver literalmente executando apenas scripts, nenhum. Se você precisar manter e adaptar scripts, precisará ter em mente diferenças bastante pequenas entre os diferentes shells subjacentes; nesse caso, haverá um custo contínuo de metal e um custo de alternância de contexto quando você precisar fazer algum trabalho no sintaxe "outro".
precisa