2 points par GN⁺ 2023-08-28 | 2 commentaires | Partager sur WhatsApp
  • fish est un shell en ligne de commande convivial qui fonctionne sur macOS, Linux et les systèmes apparentés, et propose sans configuration supplémentaire la coloration syntaxique, les suggestions automatiques pendant la saisie et l’autocomplétion par tabulation
  • Il fonctionne globalement comme d’autres shells tels que bash ou zsh, mais les principales différences que l’on peut retrouver sous « unlike other shells » sont résumées dans le tutoriel officiel
  • Les méthodes d’installation varient selon la plateforme ; sur macOS, Homebrew, MacPorts, l’installateur de fishshell.com et une application autonome sont pris en charge
    • La version minimale prise en charge sur macOS est 10.12
    • Les paquets Debian, Fedora, openSUSE et Red Hat Enterprise Linux/CentOS pour Linux sont fournis via l’openSUSE Build Service
    • Les paquets Ubuntu peuvent être installés via la PPA fish
    • Sur Windows 10/11, l’installation est possible via la procédure des distributions Linux sous WSL ou par compilation depuis les sources ; toutes les versions de Windows prennent aussi en charge une installation via Cygwin ou MSYS2
  • Après l’installation, l’utilisation commence en lançant fish depuis le shell actuel, et la documentation utilisateur est accessible via la commande help intégrée à fish ainsi que dans la documentation officielle
  • L’exécution nécessite les utilitaires POSIX de base ainsi que des utilitaires système *nix courants comme mktemp, et certaines fonctionnalités optionnelles requièrent des outils supplémentaires
    • La génération d’autocomplétions à partir des pages de manuel et l’outil de configuration web fish_config nécessitent Python 3.5+
    • L’intégration avec le presse-papiers système nécessite l’un de xsel, xclip, wl-copy/wl-paste, pbcopy/pbpaste
    • L’autocomplétion complète de yarn et npm nécessite le module NPM all-the-package-names
  • La compilation depuis les sources nécessite Rust 1.85 ou supérieur, CMake 3.15 ou supérieur, ainsi qu’un compilateur C ; PCRE2 et gettext sont traités comme des dépendances optionnelles
  • Les builds CMake et Cargo sont tous deux pris en charge ; le build Cargo place le binaire autonome dans ~/.cargo/bin/, tandis que l’installation complète via CMake fournit les pages de manuel dans les emplacements standard, une copie locale de la documentation HTML, ainsi que des options supplémentaires pour les répertoires de fonctions, d’autocomplétions et de configuration

2 commentaires

 
joyfui 2023-08-28

J'utilise zsh en ce moment, mais si j'en ai l'occasion plus tard, j'essaierai aussi fish.

 
GN⁺ 2023-08-28
Avis sur Hacker News
  • Le plus grand avantage de fish, c’est qu’il ne demande presque aucune configuration. À 41 ans, avec une famille, je n’ai absolument plus la patience de perdre du temps à configurer des outils, et zsh m’a toujours donné l’impression de me mettre des bâtons dans les roues chaque fois que j’essayais de le rendre utilisable.
    Les divers scripts zsh ne sont pas non plus franchement robustes et, si l’on utilise souvent le shell, on finit par tomber sur des cas limites que des paquets de scripts utilisateur, dont l’origine est généralement du copier-coller, ne gèrent pas.
    Mes dotfiles fish sont ici : https://github.com/mattgreen/dotfiles/tree/master/fish ; ils se limitent à un système de plugins basé sur des sous-modules, un prompt git asynchrone, des alias et quelques variables d’environnement.
    Comme fish fournit déjà presque tout, il n’y a pas de maintenance à faire ; la seule chose que j’aimerais désormais, c’est que le prompt asynchrone, que le shell est mieux placé pour gérer que du code utilisateur à cause du suivi d’état, devienne une fonctionnalité de premier ordre.

    • J’utilise bash et je n’ai pas non plus de patience pour configurer mes outils, mais ces dotfiles fish me semblent plus compliqués que ma configuration bash. À une époque, beaucoup d’autres ingénieurs de mon équipe utilisaient fish, mais je n’ai jamais vu fish faire quelque chose qu’on ne pouvait pas faire avec bash ; ça avait juste l’air un peu plus tape-à-l’œil.
      Ce qui était encore plus agaçant, c’est que lorsqu’ils demandaient de l’aide, aucune des commandes que je leur indiquais ne fonctionnait dans fish, ce qui ralentissait énormément le dépannage.
    • Il y a presque dix ans, je suis passé une seule fois par l’assistant de configuration initiale de zsh[1], et cela m’a pris environ 5 à 10 minutes. Je ne comprends pas parfaitement ce que signifie chaque commande, mais je n’y ai plus touché depuis et ça fonctionne bien.
      Le reste de ma configuration zsh est surtout constitué d’un utilitaire de prompt et d’ajouts faits au fil des années ; je n’utilise pas de plugins et je n’en ai pas besoin. Si j’en avais eu besoin, zplug, que j’ai déjà essayé, était vraiment simple à configurer et à utiliser.
      [1] : https://github.com/mid-kid/config/blob/master/shell/.zshrc#L...
    • Je suis d’accord avec presque tout. Si je n’étais pas obligé, pour le travail, d’écrire des scripts compatibles avec /bin/sh, je serais passé à Fish pour des raisons similaires.
      Du point de vue de l’expérience utilisateur, il est très largement devant les autres shells, et il est étonnant qu’il n’ait pas été adopté par défaut sur des systèmes comme macOS. Avec Fish, je peux guider des membres de ma famille dans des tâches au terminal sans que personne ne s’énerve ni n’abandonne ; difficile d’en dire autant avec les autres shells.
    • Sur le fait que la configuration de zsh me gêne constamment, oh-my-zsh m’a sauvé. Je n’ai qu’un tout petit dotfile qui délègue l’essentiel de la configuration à omz, stocké dans un dépôt bare que je clone sur chaque nouvelle machine.
      Il y a quelques années, choisir les plugins que je voulais et créer le dépôt m’a pris environ une heure ; maintenant, une nouvelle machine est prête en 5 à 10 minutes.
    • Si l’on a déjà configuré zsh à son goût, je me demande quelles améliorations ou quels changements on verrait en passant à fish.
  • J’utilise Fish comme shell de connexion depuis plus de dix ans et, contrairement à d’autres, je l’utilise aussi pour le scripting. Pour les tâches simples, il y a moins de pièges qu’avec bash, ce qui rend l’écriture de scripts bien plus agréable.
    Quand je lis des explications en ligne, adapter les exemples bash à fish est trivial. Je ne comprends pas que certains présentent cela comme un problème, et en pratique je n’ai jamais été embêté.

    • Une chose qui m’empêche de l’utiliser plus souvent pour le scripting, c’est l’absence d’un mode d’échec en cas d’erreur comme set -e dans bash. Je comprends qu’il soit difficile de faire fonctionner cela correctement dans tous les cas, par exemple jusqu’à pipefail, mais sans cette fonctionnalité je n’ai pas envie d’écrire beaucoup de scripts.
  • J’ai utilisé fish pendant environ cinq ans et je ne veux plus revenir en arrière. Même sans installer la moindre fonctionnalité supplémentaire, il fait par défaut tout ce que faisait mon ancienne configuration zsh avec gestionnaire de paquets et plugins.
    La seule chose que j’ai changée, c’est d’avoir ajouté spacefish, et maintenant starship.rs.

    • J’ai suivi le même parcours, mais récemment je suis passé au prompt Tide. Il est écrit en pur fish et il est vraiment incroyablement rapide.
    • z vaut aussi le coup d’œil. Et je ne peux pas voir ma configuration actuelle, mais il existe un plugin qui vous prévient quand une commande longue lancée en arrière-plan se termine, et c’est assez utile.
    • Je me demande à quoi vous utilisez starship. Ça a l’air intéressant, mais je ne vois pas très bien quelle imagination il faut avoir pour en exploiter pleinement le potentiel.
    • La recherche inversée est-elle désormais prise en charge ? L’autocomplétion ne m’intéresse pas.
    • Avez-vous dû convertir vos scripts existants vers fish ? Ou existe-t-il une méthode automatisée ?
  • Comme cela faisait longtemps, j’ai rassemblé les fils associés. Y en a-t-il d’autres ?
    What's Happening with Fish Releases? - https://news.ycombinator.com/item?id=36875727 - juillet 2023
    My shell setup with Fish and Tmux (2021) - https://news.ycombinator.com/item?id=35672358 - avril 2023
    Ask HN: Are alternative (oil, nu, etc.) shells usable as daily drivers? - https://news.ycombinator.com/item?id=34722208 - février 2023
    Rewrite it in Rust - https://news.ycombinator.com/item?id=34588340 - janvier 2023
    Fish 3.6.0 - https://news.ycombinator.com/item?id=34298157 - janvier 2023
    Fish Shell 3.5.0 - https://news.ycombinator.com/item?id=31768405 - juin 2022
    Fish 3.4.0 - https://news.ycombinator.com/item?id=30734072 - mars 2022
    Fish 3.4.0 Released - https://news.ycombinator.com/item?id=30660587 - mars 2022
    Ask HN: Oil or Fish Shell? - https://news.ycombinator.com/item?id=30154652 - janvier 2022
    The fish shell is amazing - https://news.ycombinator.com/item?id=29341390 - novembre 2021
    Nsh: A fish/bash-like Posix shell in Rust - https://news.ycombinator.com/item?id=28967257 - octobre 2021
    Fish Shell 3.3 - https://news.ycombinator.com/item?id=27663637 - juin 2021
    Fish shell - https://news.ycombinator.com/item?id=27180420 - mai 2021
    Fish Shell 3.2 - https://news.ycombinator.com/item?id=26302678 - mars 2021
    Fish is not operational on a VT220 terminal (2015) - https://news.ycombinator.com/item?id=25526237 - décembre 2020
    New Features in the Fish Shell - https://news.ycombinator.com/item?id=24631138 - septembre 2020
    Dolphins learn from their peers to use empty shells to catch fish - https://news.ycombinator.com/item?id=23660910 - juin 2020
    Fish Shell 3.1.0 - https://news.ycombinator.com/item?id=22314671 - février 2020
    Fish: A command line shell for the 90s - https://news.ycombinator.com/item?id=21361696 - octobre 2019
    Show HN: Fisher 3.0 – the package manager for the fish-shell - https://news.ycombinator.com/item?id=18920972 - janvier 2019
    Fish shell 3.0 - https://news.ycombinator.com/item?id=18776765 - décembre 2018
    Fish: A user-friendly command line shell for macOS, Linux, etc - https://news.ycombinator.com/item?id=15910897 - décembre 2017
    Fish (Shell) for a Week - https://news.ycombinator.com/item?id=14422672 - mai 2017

Why I'm Hooked on Fish Shell (and How to Set It Up Right) - https://news.ycombinator.com/item?id=14417046 - mai 2017
The fish shell is awesome - https://news.ycombinator.com/item?id=14179081 - avril 2017
Fish Shell Design Principles - https://news.ycombinator.com/item?id=11102941 - février 2016
Fish shell 2.2 - https://news.ycombinator.com/item?id=9873090 - juillet 2015
Fish shell - https://news.ycombinator.com/item?id=9566441 - mai 2015
FISH Shell: A dynamic shell - https://news.ycombinator.com/item?id=8783150 - décembre 2014
Fish shell 2.1 - https://news.ycombinator.com/item?id=6626635 - octobre 2013
fish shell - https://news.ycombinator.com/item?id=6224524 - août 2013
Fish shell 2.0 - https://news.ycombinator.com/item?id=5723235 - mai 2013
Fish 2.0 shell beta - https://news.ycombinator.com/item?id=5567639 - avril 2013
Fish: Finally, a command line shell for the 90s - https://news.ycombinator.com/item?id=4073162 - juin 2012
Fish sucks (but your shell sucks more) - https://news.ycombinator.com/item?id=2031110 - décembre 2010
Fish - The friendly interactive shell - https://news.ycombinator.com/item?id=820677 - septembre 2009
Fish Shell: A User-Friendly Shell or Like a Heavily Customized zsh - https://news.ycombinator.com/item?id=811113 - septembre 2009

  • https://news.ycombinator.com/item?id=23660910 pourrait bien être un lien piège pour voir qui surveille :)

  • J’ai essayé zsh à une époque, mais dans son état par défaut, il m’a semblé pratiquement similaire à bash, et il fallait passer du temps à le personnaliser pour en voir les avantages. Je n’ai pas envie de passer du temps sur la configuration du shell, je veux juste que ça fonctionne tout de suite
    Fish est nettement meilleur que bash sans aucune configuration, et son autocomplétion magique change carrément la vie

  • J’ai utilisé fish sous Ubuntu à l’université, et j’ai aussi configuré en fish le MacBook reçu à mon premier emploi. Il n’y avait qu’une seule personne en charge du DevOps, et la documentation de configuration de l’app ainsi que les scripts n’étaient prévus que pour zsh ou bash ; honnêtement, je me disais que passer à zsh ne me dérangerait pas
    Mais cette personne m’en a dissuadé, puis a passé une demi-journée à apprendre fish et a même ajouté tous les scripts fish à la documentation. Je lui en suis vraiment reconnaissant

  • Ce qui est bien avec fish, c’est qu’il fournit dès le départ pas mal de fonctionnalités pratiques, sans avoir à installer de plugins. Je n’y ai ajouté que l’intégration de starship.rs et de fzf

    • On ne fait pas généralement ces deux choses aussi avec bash ?
    • Pourquoi starship.rs est-il nécessaire ?
  • J’aime beaucoup le slogan de fish, et il est plutôt drôle. Je l’ai utilisé pendant un moment et il était tout à fait correct, mais sa stratégie de développement évite explicitement les options configurables
    Quelques points continuaient à m’agacer, et comme il n’y avait aucun moyen de modifier ce comportement, je suis passé à zsh et je l’ai fait se comporter comme fish, mais à ma façon. Pour moi, c’était une bonne décision, et je la recommande. Je n’aime pas vraiment non plus oh-my-zsh ni les gestionnaires de plugins

    • Peux-tu préciser ce qui t’agaçait ? Ce n’est pas pour critiquer, c’est par curiosité
      J’utilise fish, zsh, et maintenant aussi elvish ; ce qui compte pour moi, ce sont les suggestions automatiques et la possibilité de remonter l’historique avec la flèche haut. zsh a un module de suggestions automatiques, et elvish a l’historique via la flèche haut, mais il ne fait correspondre que le début
      Donc fish reste devant, et elvish arrive en deuxième, parce que taper une commande puis appuyer une fois sur la flèche haut donne presque l’impression d’une suggestion automatique. Je n’ai pas trouvé comment faire ça dans zsh, et je préfère aussi la manière dont fish et elvish gèrent les blocs au style traditionnel de la famille sh
  • La plus grosse erreur de fish, c’est de ne pas être compatible avec bash. Je suis trop habitué à bash, et certains systèmes d’entreprise ne donnent accès qu’à bash et ne permettent pas d’installer fish, donc je n’ai pas envie de changer
    Devoir passer sans cesse d’un langage de script à l’autre est pénible, et je ne pourrais pas le faire confortablement par mémoire musculaire

    • Il suffit de mettre #!/bin/bash en haut des scripts et de continuer à faire le scripting en bash, tout en utilisant fish uniquement comme shell interactif, non ?
    • J’utilise fish pour le travail interactif et bash pour les scripts. Pour les scripts que je ne veux pas écrire en bash, j’utilise un vrai langage de programmation comme Python ou Ruby
    • Tant que tu n’utilises pas de conditionnelles ni de boucles, tu remarqueras à peine que ce n’est pas bash
      Personnellement, je mets rarement quelque chose d’aussi complexe dans le shell, et quand j’en arrive là, je le sors dans un script
    • Avec bass, je n’ai pas vraiment ressenti le besoin de basculer souvent
      https://github.com/edc/bass
    • Ce n’est pas une erreur, c’est le cœur de fish. On ne peut pas créer un langage de scripting shell sain sans abandonner la compatibilité POSIX
  • Je n’utilise pas fish, mais il a une excellente fonctionnalité qui n’a pas encore été reproduite dans zsh : il génère l’autocomplétion à partir des pages man, ce qui permet d’obtenir automatiquement une complétion de base des options pour presque tous les programmes