Fish - un shell interactif convivial
(github.com/fish-shell)- 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
fishdepuis le shell actuel, et la documentation utilisateur est accessible via la commandehelpinté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_configné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
yarnetnpmnécessite le module NPMall-the-package-names
- La génération d’autocomplétions à partir des pages de manuel et l’outil de configuration web
- 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
J'utilise zsh en ce moment, mais si j'en ai l'occasion plus tard, j'essaierai aussi fish.
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.
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.
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...
/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.
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.
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é.
set -edans 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.
zvaut 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.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
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
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
#!/bin/bashen haut des scripts et de continuer à faire le scripting en bash, tout en utilisant fish uniquement comme shell interactif, non ?Personnellement, je mets rarement quelque chose d’aussi complexe dans le shell, et quand j’en arrive là, je le sors dans un script
bass, je n’ai pas vraiment ressenti le besoin de basculer souventhttps://github.com/edc/bass
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