IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Vous êtes nouveau sur Developpez.com ? Créez votre compte ou connectez-vous afin de pouvoir participer !

Vous devez avoir un compte Developpez.com et être connecté pour pouvoir participer aux discussions.

Vous n'avez pas encore de compte Developpez.com ? Créez-en un en quelques instants, c'est entièrement gratuit !

Si vous disposez déjà d'un compte et qu'il est bien activé, connectez-vous à l'aide du formulaire ci-dessous.

Identifiez-vous
Identifiant
Mot de passe
Mot de passe oublié ?
Créer un compte

L'inscription est gratuite et ne vous prendra que quelques instants !

Je m'inscris !

Fish Shell, un shell de ligne de commande intelligent et convivial pour les systèmes Unix,
Est-il meilleur que Zsh ou Bash ?

Le , par Bill Fassinou

72PARTAGES

12  0 
Fish (Friendly Interactive Shell) est un shell Unix de ligne de commande entièrement équipé (comme Bash ou Zsh) qui est intelligent et convivial. Fish prend en charge des fonctionnalités comme la coloration syntaxique, les suggestions automatiques et les compléments d'onglets qui fonctionnent tout simplement, sans qu'il soit nécessaire d'apprendre ou de configurer quoi que ce soit. Plusieurs différences notables rendraient Fish bien plus ergonomique que Bash. Cependant, même si Fish Shell a une syntaxe simple, elle serait incompatible avec les autres langages shell.

« Si vous voulez rendre votre ligne de commande plus productive, plus utile et plus amusante, sans avoir à apprendre un tas de syntaxe obscure et d'options de configuration, alors Fish pourrait être exactement ce que vous recherchez », a écrit l'équipe de Fish Shell dans la documentation de l'outil. Il est principalement caractérisé par les éléments suivants :

  • autosuggestions en ligne basées sur l'historique ;
  • complément de tabulation utilisant les données des pages de manuel ;
  • mise en évidence de la syntaxe ;
  • support intuitif des caractères génériques ;
  • configuration basée sur le Web ;
  • une saine écriture de scripts.

Autosuggestions et mise en évidence de la syntaxe

L'une des principales caractéristiques de Fish est l'autosuggestion implémentée dans le shell. Cette fonctionnalité vous donne la possibilité d'accéder rapidement aux commandes au fur et à mesure que vous les tapez. En d'autres termes, Fish suggère des commandes au fur et à mesure que vous tapez, en se basant sur l'historique et les complétions, tout comme un navigateur Web. Vous pouvez trouver cela dans Zsh également, mais elle serait à l'origine dans Fish.



De plus, Fish possède d'autres fonctionnalités. Par exemple, si vous faites une erreur de frappe, il affichera les commandes incorrectes et invalides en rouge. C'est beaucoup plus rapide que Ctrl+R et cela afficherait généralement la commande que vous voulez 80 % du temps. En outre, Fish est entièrement scriptable, et sa syntaxe serait simple, propre et cohérente.

Complétion d'onglets basée sur les pages de manuel

Fish analyse les pages de manuel des outils CLI, ce qui lui permet de fournir facilement des complétions automatiques pour la plupart des commandes. Vous pouvez utiliser la tabulation pour obtenir toutes les options.

Configuration basée sur le Web

Une autre caractéristique remarquable de Fish est que vous pouvez le configurer comme une interface Web fonctionnant sur votre serveur local. De plus, l'interface Web vous permet de modifier la couleur du schéma que vous souhaitez. Elle vous permet également de parcourir vos variables d'environnement. Il existe d'autres fonctionnalités :

  • recherche des raccourcis clavier du terminal ;
  • invites de commande attrayantes et colorées ;
  • historique de la ligne de commande.

Saine écriture des scripts et personnalisation

Commet souligné plus haut, Fish est entièrement scriptable, et sa syntaxe est simple, propre et cohérente. Vous n'utiliserez plus do et done dans une boucle. Il s'agirait d'un avantage clé par rapport à Bash. En outre, vous pouvez également installer des thèmes pour Fish et le personnaliser selon vos goûts. Si vous avez utilisé Zsh, vous avez peut-être utilisé le grand gestionnaire de paquets oh-my-zsh. Ici, oh-my-fish est le gestionnaire de paquets de Fish.

Utilisation des variables avec Fish Shell

Comme les autres shells, le signe dollar ($) effectue une substitution de variable. La substitution de variable se produit également dans les guillemets doubles, mais pas dans les guillemets simples. Contrairement aux autres interpréteurs de commandes, Fish n'a pas de syntaxe VARIABLE=VALUE dédiée pour définir les variables. À la place, il a une commande ordinaire : set, qui prend un nom de variable, puis sa valeur.

Comparaison entre Fish Shell et Zsh

La plupart des scripts shell sont fondamentalement les mêmes. Ils donnent le même résultat et partagent le même environnement de script. Mais certaines différences subtiles sont uniques pour chacun des scripts shell. Fish et Zsh sont classés comme les meilleurs scripts shell grâce à leur façon d'écrire des scripts et des fonctions. En outre, les deux sont des outils open source que tout le monde peut utiliser librement. Zsh est une extension du langage Bash, et la façon dont les scripts sont rédigés avec Fish est totalement différente de Bash ou, pour être plus précis, du langage Zsh.

Principales différences entre Fish et Zsh

  • Fish est facile à comprendre et à installer par rapport à Zsh. Vous n'avez pas besoin de commandes Bash ou de script Bash interactif pour installer Fish. Les plug-ins doivent être téléchargés et conservés dans un dossier spécifique pour le bon fonctionnement de Zsh. Alors que Fish, sans aucune de ces difficultés et perturbations, fonctionne bien avec n'importe quels système et utilisateurs ;
  • la syntaxe des deux langages est différente. Nous ne pouvons pas dire lequel est facile et lequel est difficile, mais ils sont différents. Lorsque plus d'alias sont utilisés dans Zsh, Fish évite simplement tout type d'alias dans le langage ;
  • la principale différence à souligner ici est que Fish possède une caractéristique de coloration syntaxique et de suggestions automatiques dans le script. Cela aide les utilisateurs à travailler avec le script en toutes circonstances et à mettre en évidence les scripts nécessaires indiqués dans le langage. Cela permet à un script Fish de se démarquer de tout autre langage de script. Le fait que les erreurs sont mises en évidence avant même d'appuyer sur la touche Entrée du clavier est un avantage majeur. Zsh n'a aucune de ces caractéristiques, et beaucoup aiment Fish à cause de cette fonctionnalité dans le langage. Toutefois, ces caractéristiques peuvent être rendues disponibles dans Zsh en installant certains plug-ins dans le système ;
  • Zsh possède de nombreux paramètres personnalisables qui incluent la correction orthographique, la personnalisation des couleurs, et ainsi de suite. Le contexte est facilement compréhensible dans Zsh, et il remplit les scripts par lui-même dans la CLI. Fish est beaucoup plus personnalisable que Zsh avec sa fonction d'aide, sa syntaxe cohérente et bien d'autres. La personnalisation des paramètres n'est pas un défi dans aucun de ces langages de script ;
  • il est facile de rechercher l'historique dans le scripting Fish avec les commandes haut et bas du langage de script. Les correspondances en double sont supprimées automatiquement, ce qui facilite l'écriture de scripts. Cette fonctionnalité n'est pas disponible dans Zsh, mais peut être ajoutée à l'aide de plug-ins dans le langage ;
  • nonobstant tous ces points glorieux de Fish, certains estiment néanmoins que les scripts Fish sont lents, plus lents que Zsh. Ainsi, ceux qui veulent travailler avec des scripts plus rapides peuvent choisir Zsh avec tous les plug-ins installés.

Comparaison entre Fish Shell et Bash

Bash est un shell Unix et un langage de commande écrit par Brian Fox pour le projet GNU en tant que logiciel libre remplaçant Bourne Shell. Bash peut également lire et exécuter des commandes depuis un fichier, appelé script shell. Bash est un outil très apprécié sous Linux, mais tout peut être amélioré. Dans la communauté, on lit beaucoup d'avis estimant que Fish est meilleur. Ces commentaires estiment que Fish est un shell alternatif pour Linux et mieux, une amélioration significative de ce que Bash a à offrir.

D'un côté, beaucoup estiment que, bien que Bash soit souvent loué comme étant un excellent shell, il a beaucoup de défauts. Fish serait une excellente alternative avec plusieurs fonctionnalités intéressantes. La plus remarquable serait la saisie prédictive. « Fish est très convivial. Commencez simplement à taper. Il va deviner. Vous voulez taper la commande pacman ? Il y a de fortes chances qu'il la remplisse pour vous. Tout ce que vous avez à faire est d'appuyer sur la flèche droite de votre clavier et de le laisser s'autocompléter. Cette fonctionnalité est très puissante », commente Derrik Diener, un blogueur du site Make Tech Easier.

La saisie prédictive de Fish ne fonctionne pas seulement avec les commandes système (comme les packagers), mais avec n'importe quel commande ou programme de terminal disponible. S'il est installé sur votre système d'une manière ou d'une autre, Fish le trouvera et vous en informera. « Si Bash est un bon shell, Fish est meilleur. Il compense une grande partie des défauts de Bash et des autres shells. La fonction d'autocomplétion est une bouée de sauvetage, et les options de configuration robustes sont un ajout bienvenu. L'interpréteur de commandes est très rapide et léger sur ses pieds », a déclaré Diener.

« Bien sûr, il existe d'autres alternatives, et peut-être même certaines qui offrent des fonctionnalités équivalentes, mais là où Fish gagne, c'est dans sa simplicité. Il est facile à mettre en place, facile à configurer et facile à faire fonctionner », a-t-il ajouté. Il existe également d'autres opinions sur le sujet : doit-on remplacer Bash par Fish ? Voici quelques-unes d'entre elles :

  1. "Bash a peut-être des défauts, mais l'absence d'autocomplétion n'en fait pas partie. Vraiment, aucun de ces shells fantaisistes et modernes avec toutes leurs cloches et leurs sifflets ne me convainc vraiment. Si je m'éloigne un jour de Bash, ce sera pour quelque chose de plus simple, comme mksh".
  2. "En ce qui concerne les langages de script, Bash est vraiment nul. Mais indépendamment du shell que vous utilisez comme shell interactif, vous pouvez écrire vos scripts dans n'importe quel langage, donc la mauvaise syntaxe de script de Bash n'est pas vraiment pertinente pour mon choix d'un shell interactif".
  3. "As-tu essayé Fish ? Je n'ai jamais été capable de faire en sorte que la complétion automatique de Bash soit aussi agréable. J'aime la façon dont Fish se souvient des complétions récentes et suggère celles-là en premier, au lieu de faire défiler les choix dans l'ordre".
  4. "Je me considère comme un novice lorsqu'il s'agit d'OS de type Unix, mais Fish a définitivement rendu l'expérience beaucoup plus amusante et pratique pour moi depuis que j'ai commencé à l'utiliser. L'autocomplétion intelligente et la facilité de configuration sont une aubaine. Il m'a fait commencer à aimer la ligne de commande, quelque chose que je n'aurais jamais cru possible auparavant".


Sources : Fish Shell, Discussion Reddit (Fish vs. Bash)

Et vous ?

Quel est votre avis sur le sujet ?
Quel shell utilisez-vous ? Quelles sont les raisons de votre choix ?
Selon vous, Fish est-il meilleur que Bash ou Zsh ? Pourquoi ?
Quelle comparaison faites-vous entre Fish et Bash et entre Fish et Zsh ?
Avez-vous testé ces trois shells ? Si oui, quel est votre retour d'expérience ?

Voir aussi

Apple remplace Bash par Zsh comme shell par défaut dans macOS Catalina, à partir de la version bêta de la nouvelle mise à jour

Xonsh : un nouveau shell qui combine Python et les fonctionnalités des shell Bash, zsh et fish, est disponible sur Windows, Mac OS X et Linux

Bash 5.0 est maintenant disponible, la cinquième version majeure du shell du projet GNU apporte de nouvelles fonctionnalités et corrections de bogues

Babel Fish ou le traducteur vocal instantané, un projet de Google sur smartphones

Une erreur dans cette actualité ? Signalez-nous-la !

Avatar de Gugelhupf
Modérateur https://www.developpez.com
Le 25/05/2021 à 17:34
Citation Envoyé par Bill Fassinou Voir le message
Quel est votre avis sur le sujet ?
Quel shell utilisez-vous ? Quelles sont les raisons de votre choix ?
Selon vous, Fish est-il meilleur que Bash ou Zsh ? Pourquoi ?
Quelle comparaison faites-vous entre Fish et Bash et entre Fish et Zsh ?
Hello, je vais essayer d'apporter 1 réponse simple à ces 4 questions: Le meilleur shell est celui qui est disponible "partout", par défaut Bourne Shell (cf: #!/bin/sh) dont Bash, Zsh, et autres apportent une surcouche.
4  0 
Avatar de disedorgue
Expert éminent sénior https://www.developpez.com
Le 26/05/2021 à 18:45
Citation Envoyé par MaximeCh Voir le message
Mon point était qu'on s'en fiche un peu d'où ça vient, Ctrl+C pour copier est devenu universel, l'ergonomie des navigateurs web et des GUIs s'est répandue partout. Les gen z ont appris l'informatique avec un web browser pas un shell. Même moi qui suis gen Y.
ll n'y a vraiment que les boomers genX qui y sont vaguement attachés : il faut évoluer.

P.S. C'est un sujet sensible, souvent reconnu clivant. De mon point de vue gros intérêt à trancher et aller de l'avant.
Marrant, déjà hors sujet puisque c'est juste de la conf de tty et non du shell

De plus, avant de faire ch... les unixiens pour leur console / terminal qui utilisent Ctrl-C pour autre chose qu'un copier, va dire à ton pote windows de le mettre en place sur ses consoles powershell ou msdos

Et un truc plus merdique que ton copier, c'est les fichiers textes dont chaque OS (UNIX / MAC / WINDOWS) y va de de sa petite sauce pour ne pas mettre tout le monde d'accord.
4  0 
Avatar de
https://www.developpez.com
Le 25/05/2021 à 14:47
https://xkcd.com/927/
3  0 
Avatar de chrtophe
Responsable Systèmes https://www.developpez.com
Le 26/05/2021 à 18:22
mouais,
sous réserve de pas faire un dev sur Python 2 à exécuter sur une machine avec Python 3.
3  0 
Avatar de kain_tn
Expert éminent https://www.developpez.com
Le 25/05/2021 à 18:21
Citation Envoyé par disedorgue Voir le message
Il y a au moins 3 choses que bash ne sait pas faire: renommer et/ou effacer un fichier et créer un répertoire (d'ailleurs, je ne pense pas que les ksh ou zsh savent le faire), est-ce que fish shell sait le faire ?

PS: ici, je parle de façon native, sans utiliser de commandes externes telles que mv, rm ou mkdir.
???

Bash, Zsh et Fish sont des shells. Ce n'est pas leur rôle d'inventer des commandes, surtout quand il existe des commandes natives pour manipuler le système de fichier de manière efficace et sûre.

Sans compter que ça limiterait leur portabilité: par exemple Bash existe sur GNU/Linux, sur plusieurs Unix avec des commandes natives ayant des options parfois différentes de la version GNU (et même sous Windows je crois, mais je peux me tromper).

Citation Envoyé par Flodelarab Voir le message
Est-ce que ce n'est pas théorique ? Les gens appellent leurs scripts machin.sh, et croient réellement faire du standard, alors que l'exécutable est un raccourci vers bash ou zsh; et dans le code, ils utilisent vraiment des particularismes bash. Bref, avalanche de faux-semblants pour faire croire qu'on fait "standard". L'exécutable "sh" est suranné.
Alors c'est vrai que tu as souvent des scripts pour des logiciels tiers (c'est-à-dire hors distribution) qui mettent un ".sh" pour du script Bash. Maintenant, une bonne pratique c'est de regarder le contenu de tes scripts avant des les exécuter, du coup dès la première ligne #!, tu verras si tu fais du bash ou du sh.

Maintenant, je pense que la remarque de Gugelhupf portait sur le fait que Bash et Zsh étendaient Bourne Shell (sh).
2  0 
Avatar de N_BaH
Modérateur https://www.developpez.com
Le 25/05/2021 à 19:58
halte au bash bashing !
2  0 
Avatar de chrtophe
Responsable Systèmes https://www.developpez.com
Le 26/05/2021 à 8:26
J'aimerais surtout enfin que le monde Unix fasse son ménage et sorte un terminal+shell qui interprète Ctrl+C (^C) comme copier et non SIGINT.
ctrl-C pour faire un copier, ça vient de Windows, même si ça c'est imposé dans les GUI. Sous MS-DOS ctrl-C interrompait aussi le programme. On peut encore avoir ce comportement dans cmd.exe avec la commande break
2  0 
Avatar de chrtophe
Responsable Systèmes https://www.developpez.com
Le 26/05/2021 à 12:19
Mon point était qu'on s'en fiche un peu d'où ça vient, Ctrl+C pour copier est devenu universel
oui, certes, mais :
ctrl-c est devenu universel pour copier dans les GUI, mais reste universel pour interrompre un processus dans un shell. Si tu fais de la ligne de commande, il faut le savoir. Par contre, je ne sais pas le comportement avec PowerShell, ni avec le nouveau terminal Windows. Point intéressant pour ceux qui font de l'environnement hétérogène.

Tu ne vas pas forcer l'équipe sous Linux à installer Zsh parce que tu es sous Mac
zsh est relativement récent sur Mac (depuis Catalina). Et en cas de mise à jour depuis système antérieur, il reste par défaut sur Bash avec une notification et une commande pour basculer sur zsh par défaut. De toute façon tu dois tenir compte des différences de plateforme dans tes scripts, après ça dépend ce que tu fais.

Je ne suis pas spécialiste shell, mais je pense qu'il est tout à fait possible de faire un script qui fonctionnera quel que soit le shell, mais du coup, aucun intérêt particulier à utiliser l'un ou l’autre. Soit on veut faire dans le compatible/facilement reprenable, soit on utilise celui qu'on veut avec pour avantage les addons par rapport à d'autres shells, avec pour inconvénient l'éventuelle non portabilité et donc l'obligation de rester sur le shell choisi.
2  0 
Avatar de CaptainDangeax
Membre expérimenté https://www.developpez.com
Le 27/05/2021 à 15:33
Citation Envoyé par disedorgue Voir le message
Il y a au moins 3 choses que bash ne sait pas faire: renommer et/ou effacer un fichier et créer un répertoire (d'ailleurs, je ne pense pas que les ksh ou zsh savent le faire), est-ce que fish shell sait le faire ?

PS: ici, je parle de façon native, sans utiliser de commandes externes telles que mv, rm ou mkdir.
Je ne suis pas du tout d'accord avec ton point de vue. Dans ton exemple les commandes mv rm et mkdir sont externes, elles sont codées, maintenues, compatibles avec les différents filesystems qu'on peut rencontrer, ne font qu'une chose et sont réputées bien le faire. Les intégrer directement dans le shell veut dire soit ré-écrire soit recopier le code si la licence le permet, pour ensuite créer la surcharge de travail pour maintenir plusieurs versions du même exécutable et intégrer tous les correctifs. As-tu entendu parler de la factorisation du code ? As-tu entendu parler des bibliothèques de fonction ? Je pense que ta remarque est due à une approche fondamentalement mauvaise du codage informatique. KISS: keep it simple and stupid, un programme=une fonctionnalité. Don't reinvent the wheel. Pourquoi pas une nouvelle version de TAR+GZIP directement dans le shell, et puis le gestionnaire de paquets tant qu'on y est
2  0 
Avatar de kain_tn
Expert éminent https://www.developpez.com
Le 25/05/2021 à 15:55
Citation Envoyé par Bill Fassinou Voir le message

Quel shell utilisez-vous ? Quelles sont les raisons de votre choix ?
J'utilise zsh depuis 2001 et je n'ai aucune raison d'en changer: tout ce qui est décrit au dessus existe déjà dans zsh. La complexion est très agréable (elle s'étend jusqu'aux options des programmes), pas de cochonneries comme un shell qui change de comportement au fur et à mesure qu'on l'utilise, et une configuration standard et facile.

Et d'ailleurs:

Citation Envoyé par Bill Fassinou Voir le message

Fish est facile à comprendre et à installer par rapport à Zsh
Ah, il y a plus facile qu'une commande du style sudo apt install zsh (ou l'équivalent clic en passant par l'interface graphique) ?

Citation Envoyé par Bill Fassinou Voir le message

Quel est votre avis sur le sujet ?
Tant qu'on ne vient pas me l'imposer, tout va bien
1  0