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.
- 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
- Você quer conforto no momento da instalação, em vez de escrever configuração?
- Sim → fish
- Não → próxima
- 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.bashrcque 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
.bashrcnã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/bashtraz 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.