2 pontos por GN⁺ 2023-08-28 | 2 comentários | Compartilhar no WhatsApp
  • 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 fish no shell atual, e a documentação para usuários pode ser consultada pelo comando help dentro 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_config exigem 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 yarn e npm exige o módulo NPM all-the-package-names
  • 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

 
joyfui 2023-08-28

Estou usando zsh agora, mas na próxima oportunidade acho que vou experimentar o fish também.

 
GN⁺ 2023-08-28
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

    • Uso bash e também não tenho paciência para configurar ferramentas, mas esses dotfiles do fish parecem mais complexos do que minha configuração do bash. Antigamente, outros engenheiros da equipe usavam bastante fish, mas nunca vi o fish fazer algo que não desse para fazer no bash; parecia só um pouco mais vistoso
      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
    • Quase 10 anos atrás passei uma única vez pelo assistente de configuração inicial do zsh[1], e levou uns 5 a 10 minutos. Não entendo completamente o que cada comando significa, mas nunca precisei mexer desde então e funciona bem
      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...
    • Concordo com quase tudo. Se não fosse por precisar escrever scripts compatíveis com /bin/sh por causa do trabalho, eu teria migrado para o Fish por motivos parecidos
      Do 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
    • A parte em que a configuração do zsh fica me atrapalhando foi resolvida pelo oh-my-zsh. Tenho só um dotfile bem pequeno que delega a maior parte da configuração ao omz, guardado em um bare repo que clono em cada máquina nova
      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
    • Se você já configurou o zsh de um jeito que gosta, fico curioso sobre que melhorias ou mudanças teria ao trocar para o fish
  • 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

    • Uma coisa que impede que eu o use com mais frequência para scripting é a falta de um modo de falhar em caso de erro como o set -e do 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 recurso
  • Usei 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

    • Eu segui o mesmo caminho, mas recentemente mudei para o prompt Tide. Ele é feito em fish puro e é surpreendentemente rápido
    • Vale a pena testar o z també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 útil
    • Fico curioso sobre para que você usa o starship. Parece interessante, mas não sei bem que tipo de imaginação é necessária para aproveitar de verdade o potencial dele
    • Busca reversa já é compatível agora? Não tenho interesse em autocompletar
    • Você precisou converter scripts existentes para fish? Ou existe algum método automatizado?
  • Como 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

    • No bash, normalmente também não se fazem essas duas coisas?
    • Por que starship.rs é necessário?
  • 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

    • Você poderia explicar com mais detalhes o que incomodava? Não é para criticar, é curiosidade
      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

    • Não bastaria colocar #!/bin/bash no começo dos scripts e continuar escrevendo scripts em bash, usando fish só como shell interativo?
    • Uso fish para trabalho interativo e bash para scripts. Se for um script que eu não queira escrever em bash, uso uma linguagem de programação de verdade, como Python ou Ruby
    • Enquanto você não usar condicionais e loops, quase não vai perceber que não é bash
      Pessoalmente, quase nunca coloco algo tão complexo assim no shell; quando chega a esse ponto, transformo em script separado
    • Com bass, quase não senti necessidade de alternar
      https://github.com/edc/bass
    • Isso não é um erro; é o ponto central do fish. Não dá para criar uma linguagem de script de shell sã sem abandonar a compatibilidade POSIX
  • 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