Vale a Pena Mudar? zsh e fish vs bash

Vale a Pena Mudar? zsh e fish vs bash

Vale a Pena Mudar de bash para zsh ou fish?

Conclusão: Se você só quer uma experiência interativa mais agradável, a mudança vale a pena. Mas mantenha bash para servidores e scripts por segurança.

A decisão se resume ao que você quer otimizar.

  • Uso interativo mais agradável (completion, histórico, highlighting) → mudar para zsh ou fish vale a pena
  • Scripts, administração de servidores, portabilidade → fique no bash; não precisa mudar
  • Não quer gastar tempo configurando → fish (excelente fora da caixa)
  • Quer compatibilidade com bash enquanto ganha recursos → zsh (a maioria dos scripts existentes funciona)

Premissa fundamental

Você só muda o shell de login usado interativamente. Scripts que começam com #!/bin/bash ainda rodam com bash independente do que você mudar. Trate os dois como assuntos separados.

A comparação recurso por recurso está coberta em bash vs zsh vs fish. Este artigo se concentra em decidir se realmente vale a pena mudar e em fazer a migração e lidar com seus problemas.

O que realmente muda quando você muda de shell?

Conclusão: O que muda é o conforto interativo (completion, sugestões, cor) e seu arquivo de configuração. O ambiente de execução de scripts não muda.

Eis o que você realmente percebe após a mudança.

Onde você nota bash zsh fish
Tab completion básico forte (menu) mais inteligente
Sugestão baseada em histórico nenhuma plugin necessário nativo (esmaecido)
Coloração de sintaxe inline nenhuma plugin necessário nativo
Arquivo de configuração ~/.bashrc ~/.zshrc ~/.config/fish/config.fish
Scripts bash existentes rodam quase sempre rodam não rodam

O conforto interativo do fish é seu principal apelo, mas a sintaxe POSIX como VAR=value, export VAR=... e if [ ... ] não roda como está. Copiar seu .bashrc para fish não vai funcionar. Essa incompatibilidade é a principal fonte de dor na migração.

Como decidir para qual shell mudar

Conclusão: Escolha zsh para levar sua configuração bash existente, fish para obter conforto do zero. Em caso de dúvida, zsh é o padrão seguro.

Fazer estas perguntas em ordem geralmente resolve.

  1. Você tem muitos aliases / funções / ajustes de PATH em .bashrc?
    • Sim → zsh (sintaxe quase idêntica, fácil de portar)
    • Não → próxima
  2. Você quer conforto no momento da instalação, em vez de escrever configuração?
    • Sim → fish
    • Não → próxima
  3. Você quer a cultura de temas/plugins do Oh My Zsh?
    • Sim → zsh
    • Qualquer um serve → zsh (mais material, menos becos sem saída)

A regra de ouro: antes de usar chsh, apenas inicie o shell temporariamente para experimentar. Digitar zsh ou fish te coloca nele sem mudar seu shell de login. exit retorna para bash.

Migrando para zsh

Conclusão: Instalar → experimentar → tornar padrão com chsh → mover as partes de .bashrc que você precisa para .zshrc. Quatro passos.

1. Instalar e experimentar

# Ubuntu / Debian
sudo apt install zsh

# Launch first, without changing your login shell
zsh

Na primeira execução, o assistente zsh-newuser-install aparece. Você pode pressionar q para pular e configurar depois.

2. Torná-lo o shell padrão

chsh -s "$(which zsh)"

Uma mudança com chsh tem efeito no próximo login (reabrir o terminal), não na sessão atual. Após aplicar, confirme com echo $SHELL que está lendo /usr/bin/zsh ou similar.

3. Levar sua configuração bash

Como a sintaxe do zsh é próxima do bash, a maioria dos aliases, funções e adições ao PATH em ~/.bashrc cola direto em ~/.zshrc e funciona. Completion específico do bash (bash-completion) e PROMPT_COMMAND, entretanto, precisam de equivalentes do zsh.

# Pastes into .zshrc and just works
alias ll='ls -alF'
export PATH="$HOME/.local/bin:$PATH"

Para configurar completion e temas de uma só vez, você pode adicionar Oh My Zsh, mas pode deixar a inicialização lenta, conforme observado na comparação de shells.

Migrando para fish

Conclusão: fish não é compatível com POSIX, então seu .bashrc não pode ser portado. Planeje reescrever a configuração na sintaxe do fish.

1. Instalar e experimentar

# Ubuntu / Debian
sudo apt install fish

# Launch without changing your login shell
fish

2. Torná-lo o shell padrão

# Confirm fish's path is registered in /etc/shells
grep fish /etc/shells

chsh -s "$(which fish)"

3. Escrever configuração na sintaxe do fish

O export e VAR=value do bash não funcionam no fish. Aqui estão as principais reescritas.

# bash:  export PATH="$HOME/.local/bin:$PATH"
# fish:
set -gx PATH $HOME/.local/bin $PATH

# bash:  alias ll='ls -alF'
# fish (alias works, but functions are preferred):
alias ll='ls -alF'

fish constrói completions interativos a partir de páginas man, então mesmo sem configuração você obtém completion de opções para muitos comandos. É por isso que é chamado de "confortável sem configuração."

Armadilhas comuns na migração

Conclusão: A maioria dos problemas é executar um script com sintaxe fish, assumir que chsh é instantâneo, ou editar o arquivo de configuração errado.

Você editou ~/.bashrc mas nada mudou

Após mudar, o arquivo que carrega é ~/.zshrc para zsh ou ~/.config/fish/config.fish para fish. Seus arquivos de configuração bash não são mais lidos pelo shell interativo. Certifique-se de estar editando o correto.

Scripts shell falham com fish

> export FOO=bar
fish: Unsupported use of '='. ...

fish não é compatível com POSIX. Para executar um script .sh, não fique no fish; execute explicitamente com bash.

bash ./deploy.sh

Se o script começa com #!/bin/bash e é executável, ./deploy.sh o executa com bash mesmo quando seu shell de login é fish.

chsh não teve efeito

chsh aplica a partir do próximo login. Reconecte via SSH, ou reabra um terminal desktop. Se você só quer uma tentativa rápida, pule chsh e inicie pelo nome (zsh / fish).

Como reverter

Conclusão: O binário do bash nunca desaparece, então chsh -s /bin/bash traz você de volta a qualquer momento. A mudança é reversível.

Se zsh / fish não te agrada, apenas defina o padrão de volta para bash.

chsh -s /bin/bash

Mesmo que um shell de login quebrado te bloqueie do terminal, você pode recuperar de outro usuário ou de um console de recuperação editando o caminho do shell no final da sua linha em /etc/passwd de volta para /bin/bash. chsh apenas reescreve /etc/passwd.

Se você mantiver os pacotes zsh / fish instalados, pode misturá-los: fish para uso interativo, bash para verificar scripts. Mudar não é uma decisão de jogar fora qualquer um deles.

Próximas Leituras