Fish - shell interativo amigável
(github.com/fish-shell)- fish é um shell de linha de comando amigável que funciona em macOS, Linux e sistemas relacionados, oferecendo destaque de sintaxe, sugestões automáticas durante a digitação e autocompletar com Tab sem necessidade de configuração adicional
- Ele funciona de forma geral de maneira semelhante a outros shells como bash ou zsh, mas as principais diferenças, que podem ser encontradas em “unlike other shells”, estão organizadas no tutorial oficial
- Os caminhos de instalação variam por plataforma, e no macOS há suporte a Homebrew, MacPorts, instalador do fishshell.com e aplicativo independente
- A versão mínima suportada do macOS é 10.12
- Pacotes para Debian, Fedora, openSUSE e Red Hat Enterprise Linux/CentOS no Linux são fornecidos pelo openSUSE Build Service
- Pacotes para Ubuntu podem ser instalados via fish PPA
- No Windows 10/11, é possível instalar pelo procedimento de distribuições Linux no WSL ou compilando a partir do código-fonte, e em todas as versões do Windows há suporte para instalação via Cygwin ou MSYS2
- Após a instalação, o uso começa executando
fishno shell atual, e a documentação para usuários pode ser consultada pelo comandohelpdentro do fish e na documentação oficial - Para executar, são necessários utilitários POSIX básicos e utilitários comuns de sistemas *nix, como
mktemp, e alguns recursos opcionais exigem ferramentas separadas- A geração de autocompletar baseada em páginas de manual e a ferramenta web de configuração
fish_configexigem Python 3.5+ - A integração com a área de transferência do sistema exige um entre
xsel,xclip,wl-copy/wl-paste,pbcopy/pbpaste - O autocompletar completo de
yarnenpmexige o módulo NPMall-the-package-names
- A geração de autocompletar baseada em páginas de manual e a ferramenta web de configuração
- A compilação a partir do código-fonte exige Rust 1.85 ou superior, CMake 3.15 ou superior e um compilador C, enquanto PCRE2 e gettext são tratados como dependências opcionais
- Há suporte tanto para build com CMake quanto com Cargo, e o build com Cargo coloca o binário independente em
~/.cargo/bin/, enquanto a instalação completa com CMake oferece páginas man em locais padrão, cópia local da documentação HTML e opções adicionais de diretórios para funções, autocompletar e configurações
2 comentários
Estou usando zsh agora, mas na próxima oportunidade acho que vou experimentar o fish também.
Opiniões no Hacker News
A maior vantagem do fish é que quase não exige configuração. Tenho 41 anos e família, então não tenho nenhuma paciência para desperdiçar tempo configurando ferramentas, e o zsh sempre parecia me atrapalhar toda vez que eu tentava deixá-lo utilizável
Vários scripts de zsh também não parecem exatamente robustos; se você usa bastante o shell, acaba encontrando algum caso de borda não tratado naquele conjunto de scripts de usuário cuja origem geralmente é copiar e colar
Meus dotfiles do fish ficam em https://github.com/mattgreen/dotfiles/tree/master/fish e têm basicamente só um sistema de plugins baseado em submódulos, um prompt git assíncrono, aliases e algumas variáveis de ambiente
Como o fish já entrega quase tudo, não precisa de manutenção; agora a única coisa que eu gostaria é que o prompt assíncrono, que é melhor o shell cuidar do que código de usuário por causa do rastreamento de estado, virasse um recurso de primeira classe
O que me irritava mais era que, quando eles pediam ajuda, nenhum dos comandos que eu passava funcionava no fish, então a resolução de problemas ficava muito mais lenta
O restante da minha configuração do zsh é, em grande parte, um utilitário de prompt e coisas que fui adicionando ao longo dos anos, e não uso nem preciso de plugins. Se precisasse, o zplug, que já testei antes, era realmente fácil de configurar e usar
[1]: https://github.com/mid-kid/config/blob/master/shell/.zshrc#L...
/bin/shpor causa do trabalho, eu teria migrado para o Fish por motivos parecidosDo ponto de vista da experiência do usuário, ele está muito à frente dos outros shells, e é até surpreendente que não tenha sido adotado como padrão em sistemas operacionais como o Mac. Com o Fish, consigo orientar familiares em tarefas no terminal sem que ninguém fique irritado ou desista; com outros shells, é difícil dizer o mesmo
Alguns anos atrás levei cerca de uma hora para escolher os plugins que queria e criar o repo; agora uma máquina nova fica pronta em 5 a 10 minutos
Uso o Fish como shell de login há mais de 10 anos e, ao contrário de outras pessoas, também uso para scripting. Para tarefas simples, ele tem menos armadilhas que o bash, então escrever scripts é muito melhor
Ao ler explicações online, converter exemplos em bash para fish é algo trivial. Não entendo quando dizem que isso é um problema, e na prática nunca tive dificuldade com isso
set -edo bash. Sei que é difícil fazer isso funcionar bem em todos os casos, por exemplo até com pipefail, mas não quero escrever muitos scripts sem esse recursoUsei fish por uns 5 anos e agora não quero voltar. Mesmo sem instalar nenhum recurso extra, ele já faz por padrão tudo que minha antiga configuração do zsh fazia com gerenciador de pacotes e plugins
A única coisa que mudei foi adicionar o spacefish, e hoje o starship.rs
ztambém. E não consigo ver minha configuração agora, mas há um plugin que avisa quando um comando em segundo plano de longa duração termina, e ele é bem útilComo fazia tempo, reuni algumas threads relacionadas. Tem mais alguma?
What's Happening with Fish Releases? - https://news.ycombinator.com/item?id=36875727 - julho de 2023
My shell setup with Fish and Tmux (2021) - https://news.ycombinator.com/item?id=35672358 - abril de 2023
Ask HN: Are alternative (oil, nu, etc.) shells usable as daily drivers? - https://news.ycombinator.com/item?id=34722208 - fevereiro de 2023
Rewrite it in Rust - https://news.ycombinator.com/item?id=34588340 - janeiro de 2023
Fish 3.6.0 - https://news.ycombinator.com/item?id=34298157 - janeiro de 2023
Fish Shell 3.5.0 - https://news.ycombinator.com/item?id=31768405 - junho de 2022
Fish 3.4.0 - https://news.ycombinator.com/item?id=30734072 - março de 2022
Fish 3.4.0 Released - https://news.ycombinator.com/item?id=30660587 - março de 2022
Ask HN: Oil or Fish Shell? - https://news.ycombinator.com/item?id=30154652 - janeiro de 2022
The fish shell is amazing - https://news.ycombinator.com/item?id=29341390 - novembro de 2021
Nsh: A fish/bash-like Posix shell in Rust - https://news.ycombinator.com/item?id=28967257 - outubro de 2021
Fish Shell 3.3 - https://news.ycombinator.com/item?id=27663637 - junho de 2021
Fish shell - https://news.ycombinator.com/item?id=27180420 - maio de 2021
Fish Shell 3.2 - https://news.ycombinator.com/item?id=26302678 - março de 2021
Fish is not operational on a VT220 terminal (2015) - https://news.ycombinator.com/item?id=25526237 - dezembro de 2020
New Features in the Fish Shell - https://news.ycombinator.com/item?id=24631138 - setembro de 2020
Dolphins learn from their peers to use empty shells to catch fish - https://news.ycombinator.com/item?id=23660910 - junho de 2020
Fish Shell 3.1.0 - https://news.ycombinator.com/item?id=22314671 - fevereiro de 2020
Fish: A command line shell for the 90s - https://news.ycombinator.com/item?id=21361696 - outubro de 2019
Show HN: Fisher 3.0 – the package manager for the fish-shell - https://news.ycombinator.com/item?id=18920972 - janeiro de 2019
Fish shell 3.0 - https://news.ycombinator.com/item?id=18776765 - dezembro de 2018
Fish: A user-friendly command line shell for macOS, Linux, etc - https://news.ycombinator.com/item?id=15910897 - dezembro de 2017
Fish (Shell) for a Week - https://news.ycombinator.com/item?id=14422672 - maio de 2017
Why I'm Hooked on Fish Shell (and How to Set It Up Right) - https://news.ycombinator.com/item?id=14417046 - maio de 2017
The fish shell is awesome - https://news.ycombinator.com/item?id=14179081 - abril de 2017
Fish Shell Design Principles - https://news.ycombinator.com/item?id=11102941 - fevereiro de 2016
Fish shell 2.2 - https://news.ycombinator.com/item?id=9873090 - julho de 2015
Fish shell - https://news.ycombinator.com/item?id=9566441 - maio de 2015
FISH Shell: A dynamic shell - https://news.ycombinator.com/item?id=8783150 - dezembro de 2014
Fish shell 2.1 - https://news.ycombinator.com/item?id=6626635 - outubro de 2013
fish shell - https://news.ycombinator.com/item?id=6224524 - agosto de 2013
Fish shell 2.0 - https://news.ycombinator.com/item?id=5723235 - maio de 2013
Fish 2.0 shell beta - https://news.ycombinator.com/item?id=5567639 - abril de 2013
Fish: Finally, a command line shell for the 90s - https://news.ycombinator.com/item?id=4073162 - junho de 2012
Fish sucks (but your shell sucks more) - https://news.ycombinator.com/item?id=2031110 - dezembro de 2010
Fish - The friendly interactive shell - https://news.ycombinator.com/item?id=820677 - setembro de 2009
Fish Shell: A User-Friendly Shell or Like a Heavily Customized zsh - https://news.ycombinator.com/item?id=811113 - setembro de 2009
https://news.ycombinator.com/item?id=23660910 talvez seja um link-armadilha para descobrir quem está observando :)
Usei zsh por um tempo, mas no estado padrão ele parecia praticamente com o bash, e a impressão era que, para ver as vantagens, era preciso investir tempo personalizando. Não quero gastar tempo configurando shell; quero que simplesmente funcione de cara
O Fish é visivelmente melhor que o bash mesmo sem nenhuma configuração, e o autocompletar mágico chega a mudar a vida
Usei fish no Ubuntu na época da faculdade e também configurei o MacBook que recebi no meu primeiro emprego para usar fish. Havia apenas uma pessoa responsável por DevOps, e a documentação de configuração do app e os scripts estavam todos só em zsh ou bash; sinceramente, achei que tudo bem mudar para zsh
Mas essa pessoa me convenceu a não mudar, passou meio dia aprendendo fish e ainda adicionou todos os scripts em fish à documentação. Sou muito grato a ela
O bom do fish é que ele já oferece bastante conveniência desde o início, sem precisar instalar plugins. Além disso, só adiciono integração com starship.rs e fzf
Gosto muito da tagline do fish, e ela é bem engraçada. Usei por um bom tempo e era bom o suficiente, mas, como estratégia de desenvolvimento, ele evita explicitamente opções configuráveis
Algumas coisas continuavam me incomodando, e não havia como mudar o comportamento, então migrei para zsh e o deixei se comportando como o fish, mas do jeito que eu queria. Para mim foi uma boa decisão, e eu recomendaria. Também não gosto muito de oh-my-zsh nem de gerenciadores de plugins
Uso fish, zsh e agora também elvish; para mim, o importante são as sugestões automáticas e a função de buscar o histórico com a seta para cima. O zsh tem um módulo de sugestões automáticas, e o elvish tem histórico pela seta para cima, mas só faz correspondência com o início
Por isso o fish ainda está à frente, e o elvish fica em segundo lugar porque digitar um comando e apertar a seta para cima uma vez quase parece uma sugestão automática. Não encontrei uma forma de fazer isso no zsh, e também prefiro a forma como fish e elvish lidam com blocos em comparação ao estilo tradicional da família sh
O maior erro do fish é não ser compatível com bash. Estou acostumado demais com bash, e em alguns sistemas da empresa só há acesso a bash e não dá para instalar fish, então não quero mudar
Ter que ficar alternando entre linguagens de script diferentes é doloroso, e não daria para fazer isso confortavelmente por memória muscular
#!/bin/bashno começo dos scripts e continuar escrevendo scripts em bash, usando fish só como shell interativo?Pessoalmente, quase nunca coloco algo tão complexo assim no shell; quando chega a esse ponto, transformo em script separado
bass, quase não senti necessidade de alternarhttps://github.com/edc/bass
Não uso fish, mas ele tem um recurso excelente que ainda não foi replicado no zsh: ele gera autocompletar a partir das páginas man, então você obtém automaticamente complementos básicos de flags para praticamente qualquer programa