História do shell e do Bash
Esta aula apresenta a história do shell e do Bash, desde os primeiros shells Unix até o Bash moderno. Você aprenderá sobre as pessoas e cronologia envolvidas, as diferenças entre sh, Bash e outros shells, e o futuro do Bash no ecossistema Linux.
O shell é um interpretador de comandos que serve como interface entre o usuário e o sistema operacional. No Linux e outros sistemas Unix-like, o shell é uma ferramenta essencial para automação, administração e desenvolvimento. O Bash (Bourne Again SHell) é o shell padrão na maioria das distribuições Linux, mas sua história remonta aos primórdios do Unix.
Nesta aula, vamos explorar a evolução do shell, desde os primeiros interpretadores criados nos laboratórios da Bell até o Bash moderno, passando pelas contribuições de figuras-chave e pela competição entre diferentes shells. Compreender essa história ajuda a entender por que o Bash é como é e como ele se encaixa no ecossistema atual.
Introdução
O shell é um programa que recebe comandos digitados pelo usuário e os executa, geralmente chamando outros programas. Ele também oferece recursos como variáveis, estruturas de controle (if, for, while) e funções, permitindo criar scripts complexos. O termo "shell" vem da ideia de ser uma casca que envolve o kernel do sistema operacional.
O primeiro shell Unix foi o Thompson shell (sh), escrito por Ken Thompson em 1971. Ele era simples e não possuía scripts. Em 1977, Stephen Bourne criou o Bourne shell (também sh), que introduziu variáveis, controle de fluxo e scripts. Esse shell tornou-se o padrão no Unix System V. Mais tarde, surgiram outros shells como C shell (csh), Korn shell (ksh) e, finalmente, o Bash.
Pessoas e cronologia (Bourne shell, Brian Fox, GNU)
O Bourne shell, desenvolvido por Stephen Bourne nos Bell Labs, foi um marco por sua sintaxe limpa e recursos de programação. Ele era o shell padrão do Unix Versão 7 e influenciou todos os shells posteriores. Seu nome é uma homenagem ao seu criador.
Com o surgimento do projeto GNU em 1983, Richard Stallman e a Free Software Foundation precisavam de um shell livre para substituir o Bourne shell proprietário. Brian Fox, um programador da FSF, começou a desenvolver o Bash em 1987. O Bash foi lançado em 1989 como parte do sistema GNU, e rapidamente se tornou o shell mais popular em sistemas Linux.
Desde então, o Bash foi mantido por várias pessoas, incluindo Chet Ramey, que assumiu a manutenção em 1992 e continua até hoje. O Bash incorporou recursos do Bourne shell, do Korn shell e do C shell, tornando-se um shell poderoso e compatível com POSIX.
sh vs bash vs outros shells
O comando sh geralmente aponta para o shell Bourne ou um shell compatível. No Linux, /bin/sh é frequentemente um link simbólico para /bin/bash ou /bin/dash (Debian Almquist shell). No entanto, o Bash possui muitos recursos que não estão no POSIX sh, como arrays, expansão de chaves e [[ ]] para testes.
Outros shells populares incluem:
- Zsh: Shell poderoso com temas e plugins, usado como padrão no macOS desde Catalina.
- Fish: Shell amigável com autocomplete inteligente e sintaxe simplificada.
- Ksh: Korn shell, muito usado em ambientes Unix comerciais.
- Dash: Shell leve e rápido, focado em conformidade POSIX, usado como
/bin/shno Debian e Ubuntu.
A principal diferença entre eles é a sintaxe, os recursos adicionais e a velocidade. Para scripts portáveis, é recomendado usar apenas recursos POSIX (sh). Para scripts do sistema, o Bash é comum por sua disponibilidade e riqueza de funcionalidades.
Futuro
O Bash continua sendo mantido ativamente, com novas versões lançadas periodicamente. A versão 5.0 foi lançada em 2019, trazendo melhorias como suporte a BASH_REMATCH e novos recursos de expansão. O Bash é parte integrante do subsistema Windows para Linux (WSL) e está presente em praticamente todos os sistemas Linux e macOS.
No entanto, novos shells como Zsh e Fish estão ganhando popularidade entre desenvolvedores por suas características modernas. Apesar disso, o Bash permanece essencial para scripts de sistema e automação, e seu aprendizado é fundamental para qualquer profissional de TI. O futuro do Bash é de coexistência com outros shells, mantendo-se como o padrão de fato em ambientes Linux.
Boas práticas e observações finais
Ao escrever scripts, prefira usar #!/bin/bash se precisar de recursos específicos do Bash. Para scripts que devem funcionar em qualquer shell POSIX, use #!/bin/sh e evite extensões. Sempre verifique a sintaxe com bash -n script.sh e teste em diferentes ambientes.
Lembre-se de que o shell é uma ferramenta poderosa, mas também pode ser perigosa. Use aspas em variáveis para evitar expansões indesejadas e evite executar comandos de fontes não confiáveis.
Referências
- GNU Bash - Página oficial
- Wikipedia: Bash (Unix shell)
- Wikipedia: Stephen R. Bourne
- Wikipedia: Brian Fox
- POSIX Shell Command Language
- GNU Bash Manual
- Arch Wiki: Bash
Exercícios
Explique a diferença entre o Bourne shell (sh) e o Bash.
✓ Resposta: O Bourne shell (sh) é o shell Unix original, com sintaxe simples e recursos limitados. O Bash (Bourne Again SHell) é uma evolução que adiciona recursos como arrays, expansão de chaves, comandos built-in e melhorias na programação. O Bash é compatível com sh, mas oferece muito mais funcionalidades.Quem criou o Bash e em que ano?
✓ Resposta: O Bash foi criado por Brian Fox em 1987 para o projeto GNU.Cite dois shells alternativos ao Bash e uma característica de cada.
✓ Resposta: Zsh: suporte a temas e plugins, autocomplete avançado. Fish: sintaxe simplificada e autocomplete inteligente.Por que
/bin/shpode ser um link simbólico para outro shell?✓ Resposta: Para manter compatibilidade com scripts que usam#!/bin/sh. Em muitas distribuições, o shell apontado é o dash (Debian Almquist shell) por ser mais leve e rápido, mas ainda compatível com POSIX.Qual é a principal vantagem de usar Bash em vez de sh em scripts modernos?
✓ Resposta: O Bash oferece recursos adicionais como arrays, operadores de teste[[ ]], expansão de chaves e substituição de processos, que facilitam a escrita de scripts mais complexos e legíveis.