bash vs zsh vs fish - Escolhendo o Shell Certo para Você

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.

Próximas Leituras