bash vs zsh vs fish - Escolhendo o Shell Certo para Você
Qual Shell Você Deve Escolher?
A resposta depende do seu caso de uso.
- bash — scripts, administração de servidores, máxima portabilidade
- zsh — uso interativo diário confortável com forte compatibilidade com bash (padrão no macOS)
- fish — melhor autocompletar e destaque de sintaxe prontos para uso, sem configuração
Se portabilidade for importante (scripts, servidores compartilhados), bash é a escolha clara. Se você quer uma ótima experiência interativa sem gastar tempo em configuração, fish te leva lá imediatamente. zsh fica no meio-termo — compatível com bash e oferecendo um rico ecossistema de plugins.
O Que é bash?
bash (Bourne Again Shell) é o shell padrão em praticamente toda distribuição Linux e era o padrão no macOS até 2019. Oferece a maior compatibilidade POSIX e é a opção mais portável para escrita de scripts shell.
echo $BASH_VERSION
5.2.21(1)-release
Características principais:
- Instalado em praticamente todo sistema Unix/Linux por padrão
- Alta compatibilidade com POSIX sh
- Recursos interativos mínimos sem configuração (sem destaque de sintaxe, autocompletar básico por Tab)
- Enorme biblioteca de scripts e documentação existentes
Use bash para qualquer script que você queira executar com confiança em diferentes sistemas. #!/bin/bash é a linha shebang mais universal.
A experiência interativa do bash pode ser melhorada instalando bash-completion, mas ainda fica atrás do zsh e fish em usabilidade cotidiana.
O Que é zsh?
zsh (Z shell) foi projetado como um bash estendido com recursos interativos aprimorados. A Apple trocou o shell padrão do macOS de bash para zsh no Catalina (2019), o que impulsionou significativamente sua adoção.
echo $ZSH_VERSION
5.9
Características principais:
- Executa a maioria dos scripts bash sem modificação
- Sistema de autocompletar interno poderoso
- Ecossistema rico: Oh My Zsh, Powerlevel10k, centenas de plugins
- Padrões glob estendidos, correção ortográfica, prompt do lado direito (RPROMPT)
Se você está migrando do bash, zsh tem baixo atrito — a maioria dos scripts existentes funciona como está. Essa é uma das principais razões pelas quais é recomendado como um passo acima do bash.
Adicionar Oh My Zsh desbloqueia centenas de plugins e temas, mas esteja ciente de que uma configuração muito carregada pode deixar o tempo de inicialização do shell notavelmente mais lento.
O Que é fish?
fish (Friendly Interactive Shell) foi construído com o princípio de "funciona bem logo de cara". Destaque de sintaxe, autosugestões e autocompletar baseado em páginas man ficam ativos imediatamente após a instalação — sem configuração necessária.
echo $version
3.7.1
Características principais:
- Destaque de sintaxe em tempo real enquanto você digita (comandos válidos em branco, comandos não reconhecidos em vermelho)
- Autosugestões baseadas em histórico e páginas man ativadas por padrão
- Configuração em
~/.config/fish/config.fish - Não é compatível com POSIX — usa sua própria sintaxe exclusiva
A sintaxe do fish é incompatível com bash/zsh. Padrões comuns como VAR=value, if [ ... ] e export não funcionam no fish. Use fish para sessões interativas e mantenha bash para scripts que precisam rodar em outros lugares.
Como bash, zsh e fish se Comparam?
| Recurso | bash | zsh | fish |
|---|---|---|---|
| Padrão em | Distros Linux | macOS | Nenhum |
| Compatibilidade bash | — | Alta | Baixa |
| Autocompletar (Tab) | Básico | Poderoso | Melhor |
| Destaque de sintaxe | Requer config | Requer config | Integrado |
| Autosugestões | Nenhuma | Requer plugin | Integrado |
| Custo de configuração | Baixo | Médio–Alto | Baixo |
| Portabilidade de scripts | Melhor | Alta | Baixa |
| Ecossistema de plugins | Mínimo | Grande (OMZ) | fisher |
| Conformidade POSIX | Alta | Alta | Baixa |
Quando Usar Cada Shell?
Administração de servidores e DevOps
Use bash. Portabilidade de scripts e disponibilidade em sistemas remotos são a prioridade. A maioria dos servidores de produção não terá fish ou zsh instalados, e depender de um shell não padrão em scripts de automação é um risco de confiabilidade.
#!/bin/bash
# Scripts que precisam rodar em vários servidores devem usar bash
set -euo pipefail
DEPLOY_DIR="/var/www/app"
echo "deploy started: ${DEPLOY_DIR}"Uso interativo diário (macOS ou WSL)
zsh ou fish. No macOS, zsh já é o padrão — adicionar Oh My Zsh ou Powerlevel10k oferece uma configuração altamente produtiva em minutos. Fish é o caminho mais rápido se você quer bom autocompletar e destaque de sintaxe sem nenhuma configuração.
# Trocar o shell padrão para zsh chsh -s /usr/bin/zsh # Trocar o shell padrão para fish (se instalado) chsh -s /usr/bin/fish
Aprendendo Linux pela primeira vez
Comece com bash. A maioria dos tutoriais, livros e exemplos online assume bash. Aprender fish primeiro cria uma lacuna de conhecimento quando você encontrar scripts ou documentação baseados em bash.
Como Verificar e Alterar Seu Shell?
Verificar seu shell atual
echo $SHELL
/bin/bash
Você também pode verificar o nome do processo em execução:
ps $$
PID TTY STAT TIME COMMAND 12345 pts/0 Ss 0:00 -bash
Listar os shells disponíveis no seu sistema
cat /etc/shells
/bin/sh /bin/bash /usr/bin/bash /bin/rbash /usr/bin/rbash /usr/bin/sh /bin/dash /usr/bin/dash /usr/bin/zsh /bin/zsh
Alterar seu shell padrão
# Trocar para zsh chsh -s /usr/bin/zsh # Trocar para fish (se instalado) chsh -s /usr/bin/fish
chsh entra em vigor no próximo login ou reinicialização do terminal — não muda a sessão atual. Verifique com echo $SHELL após reiniciar o terminal.
Se fish não estiver instalado, adicione-o com:
# Ubuntu / Debian sudo apt install fish # macOS (Homebrew) brew install fish
Equívocos Comuns
"zsh é mais rápido que bash" — A velocidade de inicialização depende da configuração. Um Oh My Zsh muito carregado de plugins costuma ser mais lento que o bash puro. Meça o tempo de inicialização do zsh com time zsh -i -c exit.
"fish não pode ser scriptado" — Fish tem sua própria linguagem de scripting, mas é incompatível com bash/POSIX sh. O scripting em fish funciona bem para funções e autocompletar específicos do fish; para automação portável, use bash.
"bash está desatualizado" — Para uso interativo, zsh e fish oferecem uma experiência melhor. Para automação em servidores, pipelines CI/CD e scripts portáveis, a estabilidade e onipresença do bash continuam sendo pontos fortes genuínos. Escolha com base na tarefa, não em tendências.