2 puntos por GN⁺ 2023-08-28 | 2 comentarios | Compartir por WhatsApp
  • fish es un shell de línea de comandos fácil de usar que funciona en macOS, Linux y sistemas relacionados, y ofrece resaltado de sintaxis, sugerencias automáticas mientras escribes y autocompletado con Tab sin configuración adicional
  • Funciona de forma muy similar a otros shells como bash o zsh, pero las principales diferencias que se pueden encontrar buscando “unlike other shells” están resumidas en el tutorial oficial
  • Las rutas de instalación se dividen por plataforma; en macOS admite Homebrew, MacPorts, el instalador de fishshell.com y una app independiente
    • La versión mínima compatible de macOS es 10.12
    • Los paquetes para Debian, Fedora, openSUSE y Red Hat Enterprise Linux/CentOS en Linux se ofrecen desde openSUSE Build Service
    • Los paquetes para Ubuntu se pueden instalar mediante el PPA de fish
    • En Windows 10/11 se puede instalar siguiendo el procedimiento de una distribución Linux en WSL o compilando desde el código fuente, y en todas las versiones de Windows se admite la instalación mediante Cygwin o MSYS2
  • Después de instalarlo, se empieza a usar ejecutando fish en el shell actual; la documentación de usuario está disponible mediante el comando help dentro de fish y en la documentación oficial
  • Para ejecutarse requiere utilidades POSIX básicas y utilidades comunes de sistemas *nix como mktemp; algunas funciones opcionales requieren herramientas adicionales
    • Para generar autocompletados basados en páginas de manual y para la herramienta web de configuración fish_config se requiere Python 3.5+
    • Para la integración con el portapapeles del sistema se requiere uno de xsel, xclip, wl-copy/wl-paste o pbcopy/pbpaste
    • Para el autocompletado completo de yarn y npm se requiere el módulo NPM all-the-package-names
  • Para compilar desde el código fuente se requiere Rust 1.85 o superior, CMake 3.15 o superior y un compilador de C; PCRE2 y gettext se tratan como dependencias opcionales
  • Admite tanto compilación con CMake como con Cargo; la compilación con Cargo coloca el binario independiente en ~/.cargo/bin/, mientras que la instalación completa con CMake ofrece páginas man en ubicaciones estándar, copias locales de la documentación HTML y opciones de directorios adicionales para funciones, autocompletados y configuración

2 comentarios

 
joyfui 2023-08-28

Ahora estoy usando zsh, pero cuando tenga la oportunidad después, creo que también debería probar fish.

 
GN⁺ 2023-08-28
Opiniones de Hacker News
  • La mayor ventaja de fish es que casi no necesita configuración. Tengo 41 años y familia, así que no tengo nada de paciencia para perder tiempo configurando herramientas, y cada vez que intentaba dejar zsh usable, sentía que se interponía
    Varios scripts de zsh tampoco parecen muy robustos, y si usas mucho la shell, tarde o temprano te topas con casos límite que no fueron contemplados en un conjunto de scripts de usuario cuyo origen suele ser copiar y pegar
    Mis dotfiles de fish están en https://github.com/mattgreen/dotfiles/tree/master/fish y solo tienen un sistema de plugins basado en submódulos, un prompt de git asíncrono, aliases y algunas variables de entorno
    Como fish ya ofrece casi todo, no requiere mantenimiento, y lo único que ahora quisiera es que convierta en una función de primera clase el prompt asíncrono, algo que, por el seguimiento de estado, es mejor que lo maneje la shell y no código de usuario

    • Uso bash y tampoco tengo paciencia para configurar herramientas, pero esos dotfiles de fish me parecen más complejos que mi configuración de bash. Antes, muchos otros ingenieros del equipo usaban fish, pero nunca vi que fish hiciera algo que no se pudiera hacer con bash; solo se veía un poco más vistoso
      Lo que más me molestaba era que, cuando pedían ayuda, ninguno de los comandos que les indicaba funcionaba en fish, así que la resolución de problemas se volvía muy lenta
    • Hace casi 10 años pasé una sola vez por el asistente de configuración inicial de zsh[1], y me tomó unos 5 a 10 minutos. No entiendo por completo qué significa cada comando, pero desde entonces no lo he modificado y funciona bien
      La mayor parte del resto de mi configuración de zsh son utilidades para el prompt y cosas que fui agregando durante años; no uso ni necesito plugins. Si los hubiera necesitado, zplug, que probé hace tiempo, era realmente fácil de configurar y usar
      [1]: https://github.com/mid-kid/config/blob/master/shell/.zshrc#L...
    • Estoy de acuerdo con casi todo. Si no tuviera que escribir scripts compatibles con /bin/sh por trabajo, me habría cambiado a Fish por razones similares
      Desde el punto de vista de la experiencia de usuario, está muy por delante de otras shells, y sorprende que no haya sido adoptada como predeterminada en sistemas operativos como Mac. Con Fish puedo guiar a mi familia en tareas de terminal sin que nadie se frustre ni abandone, pero con otras shells es difícil decir lo mismo
    • La parte de que la configuración de zsh se interpone todo el tiempo me la resolvió oh-my-zsh. Solo mantengo un dotfile muy pequeño que delega la mayor parte de la configuración en omz, y lo guardo en un repo bare que clono en cada máquina nueva
      Hace unos años me tomó más o menos una hora elegir los plugins que quería y crear el repo, y ahora dejo lista una máquina nueva en 5 a 10 minutos
    • Si ya tienes zsh configurado a tu gusto, me da curiosidad qué mejoras o cambios habría al pasarte a fish
  • Uso Fish como shell de login desde hace más de 10 años y, a diferencia de otras personas, también lo uso para scripting. Para tareas simples tiene menos trampas que bash, así que escribir scripts es mucho mejor
    Cuando leo explicaciones en línea, pasar ejemplos de bash a fish es algo trivial. No entiendo que digan que eso es un problema, y en la práctica nunca me ha causado dificultades

    • Una cosa que impide usarlo más seguido para scripting es que no tiene un modo de fallar ante errores como set -e de bash. Sé que es difícil hacer que funcione bien en todos los casos, por ejemplo incluso con pipefail, pero sin esta función no me dan ganas de escribir muchos scripts
  • Usé fish unos 5 años y ahora no quiero volver atrás. Sin instalar ninguna funcionalidad extra, en su estado base ya hace todo lo que hacía mi antigua configuración de zsh con gestor de paquetes y plugins incluidos
    Lo único que cambié fue agregar spacefish, y ahora starship.rs

    • Yo seguí un camino parecido, pero últimamente me pasé al prompt Tide. Está hecho en fish puro y es realmente sorprendentemente rápido
    • z también vale la pena probarlo. Y aunque ahora no puedo ver mi configuración, hay un plugin que avisa cuando termina un comando de fondo de larga duración, y es bastante útil
    • Me da curiosidad para qué usas starship. Se ve interesante, pero no sé bien qué habría que imaginar para aprovechar todo su potencial
    • ¿La búsqueda inversa ya está soportada? No me interesa el autocompletado
    • ¿Tuviste que convertir scripts existentes a fish? ¿O hay alguna forma automatizada?
  • Como hacía tiempo que no aparecía, recopilé algunos hilos relacionados. ¿Hay más?
    What's Happening with Fish Releases? - https://news.ycombinator.com/item?id=36875727 - julio 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 - febrero de 2023
    Rewrite it in Rust - https://news.ycombinator.com/item?id=34588340 - enero de 2023
    Fish 3.6.0 - https://news.ycombinator.com/item?id=34298157 - enero de 2023
    Fish Shell 3.5.0 - https://news.ycombinator.com/item?id=31768405 - junio de 2022
    Fish 3.4.0 - https://news.ycombinator.com/item?id=30734072 - marzo de 2022
    Fish 3.4.0 Released - https://news.ycombinator.com/item?id=30660587 - marzo de 2022
    Ask HN: Oil or Fish Shell? - https://news.ycombinator.com/item?id=30154652 - enero de 2022
    The fish shell is amazing - https://news.ycombinator.com/item?id=29341390 - noviembre de 2021
    Nsh: A fish/bash-like Posix shell in Rust - https://news.ycombinator.com/item?id=28967257 - octubre de 2021
    Fish Shell 3.3 - https://news.ycombinator.com/item?id=27663637 - junio de 2021
    Fish shell - https://news.ycombinator.com/item?id=27180420 - mayo de 2021
    Fish Shell 3.2 - https://news.ycombinator.com/item?id=26302678 - marzo de 2021
    Fish is not operational on a VT220 terminal (2015) - https://news.ycombinator.com/item?id=25526237 - diciembre de 2020
    New Features in the Fish Shell - https://news.ycombinator.com/item?id=24631138 - septiembre de 2020
    Dolphins learn from their peers to use empty shells to catch fish - https://news.ycombinator.com/item?id=23660910 - junio de 2020
    Fish Shell 3.1.0 - https://news.ycombinator.com/item?id=22314671 - febrero de 2020
    Fish: A command line shell for the 90s - https://news.ycombinator.com/item?id=21361696 - octubre de 2019
    Show HN: Fisher 3.0 – the package manager for the fish-shell - https://news.ycombinator.com/item?id=18920972 - enero de 2019
    Fish shell 3.0 - https://news.ycombinator.com/item?id=18776765 - diciembre de 2018
    Fish: A user-friendly command line shell for macOS, Linux, etc - https://news.ycombinator.com/item?id=15910897 - diciembre de 2017
    Fish (Shell) for a Week - https://news.ycombinator.com/item?id=14422672 - mayo de 2017

Why I'm Hooked on Fish Shell (and How to Set It Up Right) - https://news.ycombinator.com/item?id=14417046 - mayo 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 - febrero de 2016
Fish shell 2.2 - https://news.ycombinator.com/item?id=9873090 - julio de 2015
Fish shell - https://news.ycombinator.com/item?id=9566441 - mayo de 2015
FISH Shell: A dynamic shell - https://news.ycombinator.com/item?id=8783150 - diciembre de 2014
Fish shell 2.1 - https://news.ycombinator.com/item?id=6626635 - octubre 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 - mayo 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 - junio de 2012
Fish sucks (but your shell sucks more) - https://news.ycombinator.com/item?id=2031110 - diciembre de 2010
Fish - The friendly interactive shell - https://news.ycombinator.com/item?id=820677 - septiembre de 2009
Fish Shell: A User-Friendly Shell or Like a Heavily Customized zsh - https://news.ycombinator.com/item?id=811113 - septiembre de 2009

  • https://news.ycombinator.com/item?id=23660910 quizás sea un enlace trampa para ver quién está mirando :)

  • Probé zsh en algún momento, pero en su estado predeterminado se sentía prácticamente parecido a bash, y me dio la impresión de que para ver sus ventajas había que dedicar tiempo a personalizarlo. No quiero gastar tiempo configurando el shell; quiero que simplemente funcione de inmediato
    Fish es notablemente mejor que bash sin ninguna configuración, y su autocompletado mágico llega a cambiarte la vida

  • En la universidad usé fish en Ubuntu, y también configuré con fish la MacBook que me dieron en mi primer trabajo. Solo había una persona encargada de DevOps, y la documentación de configuración de la app y los scripts estaban solo para zsh o bash; sinceramente, pensé que no pasaba nada si me cambiaba a zsh
    Pero esa persona me frenó, se pasó medio día aprendiendo fish y agregó a la documentación todos los scripts para fish. De verdad se lo agradezco mucho

  • Lo bueno de fish es que ofrece bastantes funciones de comodidad desde el inicio, sin instalar plugins. A eso solo le agrego la integración con starship.rs y fzf

    • ¿En bash normalmente no se hacen también esas dos cosas?
    • ¿Para qué hace falta starship.rs?
  • Me gusta mucho el eslogan de fish y me parece bastante gracioso. Lo usé durante un tiempo y era suficientemente bueno, pero por estrategia de desarrollo evita explícitamente las opciones configurables
    Había varias cosas que me seguían molestando, y como no había forma de cambiar ese comportamiento me pasé a zsh y lo hice comportarse como fish, pero de la manera que yo quería. Para mí fue una buena decisión y lo recomendaría. Tampoco me gustan mucho oh-my-zsh ni los gestores de plugins

    • ¿Podrías contar con más detalle qué te molestaba? No lo digo para criticar, sino por curiosidad
      Uso fish, zsh y ahora también elvish, y lo importante para mí son las sugerencias automáticas y la función de recuperar el historial con la flecha hacia arriba. zsh tiene un módulo de sugerencias automáticas, y elvish tiene historial con la flecha hacia arriba, pero solo hace coincidencia con el comienzo
      Por eso fish sigue adelante, y elvish queda segundo, porque escribir un comando y presionar una vez la flecha hacia arriba se siente casi como una sugerencia automática. No encontré cómo hacer eso en zsh, y para el manejo de bloques también prefiero el estilo de fish y elvish al estilo tradicional de la familia sh
  • El mayor error de fish es que no es compatible con bash. Estoy demasiado acostumbrado a bash, y en algunos sistemas de la empresa solo hay acceso a bash y no se puede instalar fish, así que no quiero cambiarme
    Tener que estar alternando entre distintos lenguajes de scripting es doloroso, y no podría hacerlo cómodamente por memoria muscular

    • ¿No bastaría con poner #!/bin/bash al inicio del script y seguir haciendo scripting en bash, mientras usas fish solo como shell interactivo?
    • Para el trabajo interactivo uso fish y para scripting uso bash. Si es un script que no quiero escribir en bash, uso un lenguaje de programación de verdad como Python o Ruby
    • Mientras no uses condicionales ni bucles, casi ni vas a notar que no es bash
      Personalmente, casi nunca meto cosas tan complejas en el shell, y si llego a ese punto lo saco a un script
    • Con bass no sentí mucha necesidad de cambiar de uno a otro
      https://github.com/edc/bass
    • Eso no es un error, es el núcleo de fish. No se puede crear un lenguaje de scripting de shell razonable sin abandonar la compatibilidad POSIX
  • No uso fish, pero tiene una excelente función que todavía no se ha replicado en zsh: genera autocompletados a partir de las páginas man, así que se obtiene automáticamente completado básico de flags para casi cualquier programa