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

292PARTAGES

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...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.

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 Christophe
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 Christophe
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 Christophe
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