História do shell e do Bash
Esta aula explora a história do shell no Unix, desde os primeiros shells como o Thompson shell até o Bash, cobrindo pessoas-chave como Ken Thompson e Brian Fox, a diferença entre sh e bash, e as tendências futuras. O aluno compreenderá a evolução dos shells e seu papel fundamental nos sistemas Linux.
O shell é a interface de linha de comando que permite interagir com o sistema operacional Unix/Linux. Entender sua história é essencial para apreciar as ferramentas que usamos hoje e suas filosofias de design. Nesta aula, vamos percorrer a evolução do shell, desde os primeiros dias do Unix até o Bash moderno, e discutir as diferenças entre os principais shells e o que o futuro reserva.
O shell não é apenas um interpretador de comandos; é também uma linguagem de programação poderosa para automação de tarefas. Conhecer sua origem ajuda a entender por que certos comportamentos existem e como o Bash se tornou o shell padrão na maioria das distribuições Linux.
Introdução
O shell surgiu como uma necessidade de interagir com o sistema operacional Unix de forma mais produtiva que a simples execução de programas individuais. O primeiro shell, chamado Thompson shell (sh), foi criado por Ken Thompson em 1971 e oferecia recursos básicos como redirecionamento de entrada/saída e pipes. No entanto, era limitado para scripts complexos.
Em 1977, Stephen Bourne criou o Bourne shell (também chamado sh) no Bell Labs, que introduziu conceitos como variáveis, estruturas de controle (if, for, while) e funções, tornando-o adequado para scripts. O Bourne shell foi distribuído com o Unix Version 7 e se tornou o shell padrão por muitos anos. Seu design influenciou profundamente todos os shells posteriores.
Pessoas e cronologia (Bourne shell, Brian Fox, GNU)
O Bourne shell foi um grande avanço, mas tinha limitações, como falta de recursos interativos (histórico de comandos, edição de linha). Isso motivou o desenvolvimento de outros shells, como o C shell (csh) de Bill Joy em 1978, que trouxe recursos interativos mas com sintaxe diferente. O Korn shell (ksh) de David Korn em 1983 combinou a sintaxe do Bourne com recursos interativos do C shell.
No final dos anos 80, o projeto GNU precisava de um shell livre que substituísse o Bourne shell. Brian Fox, funcionário da Free Software Foundation, começou a escrever o Bourne Again SHell (bash) em 1987. O bash foi projetado para ser compatível com o Bourne shell, mas incorporar recursos do ksh e csh. Sua primeira versão beta foi lançada em 1989, e desde então se tornou o shell padrão na maioria das distribuições Linux e no macOS.
O bash continuou a evoluir sob a liderança de Chet Ramey, que assumiu a manutenção em 1992. Hoje, o bash é um software maduro, com versões estáveis lançadas regularmente. Sua história está intrinsecamente ligada ao movimento do software livre e ao sucesso do Linux.
sh vs bash vs outros shells
O comando sh historicamente se refere ao Bourne shell, mas em muitos sistemas Linux, /bin/sh é um link simbólico para /bin/bash (ou, em alguns casos, para dash). O bash é um superconjunto do sh: ele executa scripts sh, mas oferece extensões como arrays, substituição de processo e expressões regulares. Para portabilidade, scripts que usam apenas recursos POSIX podem usar #!/bin/sh, mas se usam extensões bash, devem usar #!/bin/bash.
Outros shells populares incluem:
- Zsh (Z shell): foco em interatividade, com temas, plugins e autocompletar avançado. É o shell padrão no macOS desde Catalina.
- Fish (Friendly Interactive Shell): destaca-se por sugestões automáticas, sintaxe colorida e configuração fácil, mas não é compatível com POSIX.
- Dash (Debian Almquist Shell): shell leve e rápido, usado como
/bin/shno Debian e Ubuntu para scripts de inicialização.
A escolha do shell depende do caso de uso: para scripts portáteis, prefira sh (POSIX); para scripts avançados, use bash; para uso interativo, considere zsh ou fish.
Futuro
O bash continua sendo amplamente utilizado, mas seu desenvolvimento é conservador. Novos recursos são adicionados com cuidado para manter a compatibilidade. Enquanto isso, shells como zsh e fish ganham popularidade entre desenvolvedores por sua usabilidade. O futuro pode trazer shells com melhor integração com containers, suporte nativo a JSON ou YAML, e maior segurança. No entanto, o bash provavelmente permanecerá como o padrão em servidores e sistemas embarcados devido à sua ubiquidade e estabilidade.
A tendência é que os shells evoluam para oferecer melhor experiência interativa, mantendo a compatibilidade com scripts existentes. Iniciativas como o 'Nushell' (nu) propõem um shell moderno com modelo de dados estruturados, mas ainda são nicho. Por enquanto, o bash continua sendo a habilidade fundamental para qualquer profissional de Linux.
Boas práticas
Ao escrever scripts, sempre especifique o shebang correto (#!/bin/bash ou #!/bin/sh) e evite extensões não portáteis se precisar de compatibilidade. Use ferramentas como shellcheck para analisar scripts e seguir boas práticas. Além disso, conheça a história do shell para entender por que certos comandos funcionam de determinada maneira.
Referências
- Manual do Bash (GNU)
- Bash na Wikipedia
- Bourne shell na Wikipedia
- História do Bash (GNU)
- Shell Command Language (POSIX)
Exercícios
Qual foi o primeiro shell do Unix e quem o criou?
✓ Resposta: O primeiro shell foi o Thompson shell, criado por Ken Thompson em 1971.Em que ano o Bourne shell foi lançado e qual sua principal contribuição?
✓ Resposta: O Bourne shell foi lançado em 1977 por Stephen Bourne, e sua principal contribuição foi introduzir variáveis, estruturas de controle e funções, tornando o shell adequado para scripts.Quem criou o Bash e qual era seu objetivo?
✓ Resposta: O Bash foi criado por Brian Fox em 1987 como parte do projeto GNU, com o objetivo de ser um shell livre compatível com o Bourne shell, incorporando recursos do ksh e csh.Qual a diferença entre
#!/bin/she#!/bin/bash?✓ Resposta:#!/bin/shindica que o script deve ser executado pelo shell padrão do sistema (geralmente bash ou dash), que segue o padrão POSIX. Já#!/bin/bashespecifica explicitamente o Bash, permitindo usar extensões como arrays e substituição de processo.Cite dois shells modernos focados em interatividade e suas características principais.
✓ Resposta: Zsh (Z shell): foco em temas, plugins e autocompletar avançado. Fish: sugestões automáticas, sintaxe colorida e configuração fácil.