Aller au contenu
Administration Linux medium

Fish (Friendly Interactive Shell) expliqué

21 min de lecture

Logo Fish

Quand on parle de shells, les noms de Bash et Zsh reviennent toujours en premier. Et pour cause, ce sont des standards ! Mais, entre nous, il y a un nouveau joueur dans la partie : Fish (Friendly Interactive Shell). Contrairement à ses cousins, Fish a été conçu dès le départ pour simplifier la vie des utilisateurs, tout en étant plus intuitif et visuellement agréable. Pas besoin d’être un expert pour en tirer parti.

Après avoir exploré Bash, la solution par défaut sur de nombreuses distributions Linux, et Zsh, connu pour sa flexibilité et ses fonctionnalités avancées, il était temps de regarder ce que Fish apporte à la table. Et je dois dire qu’il ne déçoit pas : complétion intelligente, syntaxe simple et surtout, il est prêt à l’emploi sans avoir besoin de passer des heures en configuration.

Alors, prêt à plonger ? 🐟

Pour comprendre pourquoi Fish est devenu un shell si apprécié, il faut remonter à sa création en 2005. À cette époque, les développeurs et administrateurs système utilisaient principalement Bash ou Zsh, des outils puissants, mais souvent intimidants pour les nouveaux venus. Entre les syntaxes cryptiques et la nécessité de longues configurations pour les rendre ergonomiques, ces shells avaient besoin d’un concurrent plus user-friendly.

Fish, acronyme de Friendly Interactive Shell, a été conçu avec un objectif clair : offrir un shell moderne et convivial sans sacrifier la puissance. Ses créateurs, inspirés par les lacunes des outils traditionnels, voulaient créer un shell qui :

  • Était prêt à l’emploi, sans configuration complexe.
  • Offrait une expérience interactive plus intuitive grâce à des suggestions automatiques et une complétion intelligente.
  • Était agréable visuellement, avec une syntaxe colorée pour améliorer la lisibilité.

La première version publique de Fish a rapidement attiré l’attention des développeurs et administrateurs système curieux d’essayer quelque chose de nouveau. À cette époque, les fonctionnalités comme la complétion contextuelle ou les invites dynamiques étaient rares, voire inexistantes dans les autres shells.

Ce qui distingue Fish dès ses débuts, c’est son approche radicale : s’affranchir des conventions historiques des shells Unix, souvent déroutantes pour les débutants. Par exemple :

  • La syntaxe de Fish est volontairement différente de Bash et Zsh. Pas besoin de export VAR=value ou de mettre des parenthèses étranges autour des commandes.
  • Les fonctions universelles, les alias dynamiques et l’historique partagé entre sessions étaient déjà des idées innovantes, bien avant leur adoption par d’autres outils.

Dans les années qui suivent sa sortie, Fish se fait une place grâce à une communauté d’utilisateurs enthousiastes. Le projet gagne en visibilité notamment grâce à GitHub, où il est publié en open source. Les contributions commencent à affluer et le shell évolue rapidement.

Parmi les jalons marquants de son évolution :

  • 2009 : Introduction de l’interface web locale pour configurer le shell facilement (fish_config).
  • 2013 : Lancement de Fish 2.0, qui améliore la gestion des scripts et introduit des raccourcis clavier spécifiques.
  • 2016 : Avec Fish 2.3, le gestionnaire de plugins Fisher devient incontournable pour étendre les capacités du shell.
  • 2018 : Fish 3.0 marque un tournant avec une amélioration massive des performances et un support encore plus étendu pour les outils modernes.

Installer Fish est un jeu d’enfant, quel que soit votre système d’exploitation. Voici un guide simple pour vous lancer, que vous soyez sous Linux, macOS, ou Windows.

La plupart des distributions Linux offrent Fish directement dans leurs dépôts. Voici comment l’installer selon votre distribution.

  • Ubuntu / Debian :

    Fenêtre de terminal
    sudo apt update
    sudo apt install fish

    Si vous ne maitrisez pas le gestionnaire de paquets apt, je vous recommande de lire mon guide sur apt pour mieux comprendre son fonctionnement.

  • Fedora :

    Fenêtre de terminal
    sudo dnf install fish
  • Arch Linux :

    Fenêtre de terminal
    sudo pacman -S fish
  • Autres distributions : Consultez le site officiel de Fish pour des instructions spécifiques.

macOS utilise zsh ou bash par défaut, mais vous pouvez installer Fish très facilement grâce à Homebrew.

  1. Installez Fish :

    Fenêtre de terminal
    brew install fish

Sous Windows, Fish peut être installé sur WSL : Windows Subsystem for Linux :

Fenêtre de terminal
sudo apt install fish

Après l’installation, vous pouvez définir Fish comme shell par défaut pour éviter de taper fish à chaque fois.

Fenêtre de terminal
chsh -s $(which fish)

Relancez votre terminal et vous voilà directement dans le monde de Fish !

L’un des atouts majeurs de Fish est sa capacité à être prêt à l’emploi, tout en offrant une personnalisation très simple. Je vais vous montrer comment rendre Fish non seulement fonctionnel, mais aussi agréable à utiliser, tout en exploitant ses suggestions intelligentes et ses couleurs dynamiques.

L’invite par défaut de Fish est déjà pas mal, mais pourquoi ne pas lui donner un style qui vous ressemble ? La commande magique pour ça, c’est :

Fenêtre de terminal
fish_config

Cela ouvre une interface web locale où vous pouvez :

  • Choisir un thème d’invite parmi les options disponibles.
  • Personnaliser l’apparence et les informations affichées, comme le chemin du répertoire, l’état du git, etc.

Fish Config

Pour appliquer un thème :

  1. Lancez fish_config.
  2. Dans l’onglet “Prompts”, cliquez sur “Try it” pour tester les thèmes.
  3. Une fois satisfait, cliquez sur “Set Prompt” et Theme Set.

Les alias permettent de simplifier vos commandes. Contrairement à Bash ou Zsh, avec Fish, vous n’avez pas besoin de modifier manuellement un fichier de configuration.

Pour créer un alias :

Fenêtre de terminal
alias ll="ls -la"

Cet alias est actif immédiatement, mais temporaire. Pour le rendre permanent, ajoutez-le à votre configuration utilisateur

Fenêtre de terminal
funcsave ll

Pour aller encore plus loin dans la personnalisation, il existe un gestionnaire de plugins ultra pratique : Fisher.

  1. Installez Fisher :

    Fenêtre de terminal
    curl -sL https://git.io/fisher | source && fisher install jorgebucaran/fisher
  2. Installez un plugin : Par exemple, pour installer un thème populaire comme bobthefish :

    Fenêtre de terminal
    fisher install oh-my-fish/theme-bobthefish
  3. Liste des plugins installés :

    Fenêtre de terminal
    fisher list
  4. Désinstallez un plugin si nécessaire :

    Fenêtre de terminal
    fisher remove <nom_du_plugin>

Liste des plugins disponibles sur le site de Fisher

Toutes vos configurations sont stockées dans le répertoire :

Fenêtre de terminal
~/.config/fish

Si vous souhaitez sauvegarder ou partager votre configuration entre plusieurs machines, il suffit de copier ce fichier, ou mieux, de le gérer via Git. Par exemple :

Fenêtre de terminal
git init ~/.config/fish
cd ~/.config/fish
git add .
git commit -m "Initial Fish configuration"

Avec ces astuces, Fish deviendra un outil qui non seulement vous fait gagner du temps, mais aussi qui vous ressemble. Prochaine étape : ajouter des extensions et des intégrations pour booster votre productivité. 🐟

L’un des nombreux avantages de Fish est son interactivité fluide, renforcée par une série de raccourcis clavier qui vous permettent d’accélérer votre travail. Ces raccourcis sont soit natifs, soit personnalisables pour répondre à vos besoins spécifiques.

Voici les raccourcis de base que tout utilisateur de Fish devrait connaître. Ils vous feront gagner un temps fou dans la navigation et la gestion des commandes.

  • Historique de commandes :

    • / : Parcourez les commandes précédentes.
    • Ctrl + R : Recherche dans l’historique avec une recherche incrémentale intelligente. Tapez une partie de la commande et Fish vous propose les correspondances en direct.
  • Édition de commandes :

    • Ctrl + A : Place le curseur au début de la ligne.
    • Ctrl + E : Place le curseur à la fin de la ligne.
    • Ctrl + U : Efface tout avant le curseur.
    • Ctrl + K : Efface tout après le curseur.
    • Alt + ← / Alt + → : Déplacez le curseur mot par mot.
  • Suppression :

    • Ctrl + W : Supprime le mot avant le curseur.
    • Ctrl + D : Supprime le caractère sous le curseur ou ferme le terminal si la ligne est vide.

Fish facilite la gestion des répertoires avec des raccourcis pratiques :

  • Changer de répertoire :

    • Alt + ↑ / Alt + ↓ : Navigue dans l’historique des répertoires.
    • Ctrl + Alt + D : Accède directement au dernier répertoire visité.
  • Recherche de fichiers : Si vous avez installé le plugin fzf, vous pouvez activer une recherche fuzzy dans vos fichiers :

    Fenêtre de terminal
    bind \cf 'fzf'

Fish est célèbre pour ses suggestions intelligentes. Ces raccourcis vous permettent de maximiser leur utilisation :

  • Complétion automatique :

    • Tab : Affiche les suggestions de complétion pour la commande ou l’argument en cours.
    • : Accepte la suggestion affichée (complétion basée sur l’historique).
  • Recherche rapide :

    • Ctrl + S : Active la recherche dans les résultats de history.
    • Alt + . : Insère le dernier argument de la commande précédente.

Pour manipuler les processus directement depuis Fish, ces raccourcis sont essentiels :

  • Contrôle de l’exécution :

    • Ctrl + C : Arrête une commande ou un script en cours.
    • Ctrl + Z : Met un processus en pause (en arrière-plan).
  • Relancer ou gérer un processus :

    • fg : Relance un processus mis en pause avec Ctrl + Z.
    • jobs : Liste les processus en arrière-plan.

Fish vous permet également de créer vos propres raccourcis pour les tâches répétitives.

  • Ajouter un raccourci personnalisé : Les raccourcis sont définis avec la commande bind. Par exemple, pour définir un raccourci Ctrl + T qui affiche l’heure actuelle :

    Fenêtre de terminal
    bind \ct 'date'
  • Lister tous les raccourcis : Utilisez cette commande pour voir les raccourcis actifs et leurs actions associées :

    Fenêtre de terminal
    bind
  • Modifier un raccourci existant : Si vous voulez changer un raccourci, éditez votre fichier config.fish :

    Fenêtre de terminal
    vim ~/.config/fish/config.fish

    Ajoutez-y des commandes comme :

    Fenêtre de terminal
    bind \cc 'clear'

Si vous utilisez Fish pour écrire des scripts, il existe des raccourcis pour accélérer vos tâches courantes :

  • Exécuter un script ou une fonction rapidement :

    • Ajoutez des alias ou des abréviations (abbr) pour exécuter des scripts avec des noms courts :

      Fenêtre de terminal
      abbr gs "git status"
  • Lancer un script avec un raccourci clavier : Assignez un raccourci qui exécute directement un script Fish :

    Fenêtre de terminal
    bind \cr 'source ~/scripts/mon_script.fish'

Pour découvrir ou approfondir l’utilisation des raccourcis clavier dans Fish, consultez :

  • La documentation officielle des raccourcis : Fish Key Bindings
  • La commande bind pour inspecter et personnaliser vos raccourcis.

Avec ces raccourcis, Fish devient un véritable outil de productivité au quotidien. Prenez le temps de les apprendre et de les personnaliser : vous serez surpris de voir à quel point ils simplifient vos flux de travail. 😊🐟

Dans Fish, les fonctions permettent de regrouper plusieurs commandes sous un même nom, pour simplifier les tâches répétitives ou complexes. Contrairement aux alias, elles offrent plus de flexibilité et permettent des scripts dynamiques. Avec une syntaxe simple et lisible, Fish facilite la création et l’utilisation de fonctions avancées.

Créer une fonction dans Fish est un jeu d’enfant. Voici la syntaxe de base :

Fenêtre de terminal
function nom_de_la_fonction
# Commandes à exécuter
end

Exemple :

Fenêtre de terminal
function bonjour
echo "Bonjour, utilisateur de Fish !"
end

Pour appeler cette fonction :

Fenêtre de terminal
bonjour

Les fonctions Fish peuvent prendre des arguments, accessibles via $argv. Voici un exemple pratique :

Fenêtre de terminal
function salut
echo "Salut, $argv[1] ! Comment vas-tu ?"
end

Appel de la fonction avec un argument :

Fenêtre de terminal
salut Bob

Sortie :

Fenêtre de terminal
Salut, Bob ! Comment vas-tu ?

Vous pouvez accéder à plusieurs arguments :

  • $argv[1] pour le premier.
  • $argv[2], $argv[3], etc., pour les suivants.
  • $argv pour tous les arguments.

Les fonctions que vous créez dans une session Fish sont temporaires, sauf si vous les enregistrez.

  • Rendre une fonction permanente : Utilisez funcsave :

    Fenêtre de terminal
    funcsave bonjour

    Cela enregistre la fonction dans ~/.config/fish/functions/bonjour.fish.

  • Lister les fonctions existantes :

    Fenêtre de terminal
    functions
  • Supprimer une fonction :

    Fenêtre de terminal
    functions -e nom_de_la_fonction

Les fonctions Fish peuvent inclure des variables et des conditions pour répondre à des besoins complexes.

  • Exemple 1 : Utilisation d’une condition
Fenêtre de terminal
function verifier
if test $argv[1] -lt 10
echo "Le nombre est inférieur à 10."
else
echo "Le nombre est supérieur ou égal à 10."
end
end

Appel :

Fenêtre de terminal
verifier 8
  • Exemple 2 : Utilisation d’une boucle
Fenêtre de terminal
function compter
for i in (seq $argv[1])
echo "Nombre : $i"
end
end

Appel :

Fenêtre de terminal
compter 5

Une fonction universelle est accessible dans toutes les sessions Fish (y compris les nouveaux terminaux). Pour créer une fonction universelle, utilisez l’option --universal :

Fenêtre de terminal
function universelle --universal
echo "Ceci est une fonction universelle."
end

Pour supprimer une fonction universelle :

Fenêtre de terminal
functions -e --universal universelle

Fish offre des outils puissants pour enrichir vos fonctions.

  • Événements personnalisés : Les fonctions peuvent être liées à des événements.

    Fenêtre de terminal
    function dire_bonjour --on-event session-start
    echo "Bienvenue dans Fish !"
    end
  • Fonctions d’aide : Ajoutez une documentation directement dans vos fonctions :

    Fenêtre de terminal
    function addition --description "Ajoute deux nombres"
    echo $argv[1] + $argv[2] = (math $argv[1] + $argv[2])
    end

    Testez-la avec :

    Fenêtre de terminal
    functions --help addition
  • Fonctions imbriquées : Vous pouvez appeler une fonction depuis une autre.

    Fenêtre de terminal
    function parent
    echo "Je suis la fonction parent."
    enfant
    end
    function enfant
    echo "Et moi, je suis la fonction enfant."
    end

Pour tester ou déboguer une fonction, utilisez l’option --trace :

Fenêtre de terminal
functions --trace nom_de_la_fonction

Cela vous permettra de voir chaque commande exécutée et de corriger les éventuels problèmes.

Les fonctions avancées dans Fish sont un outil essentiel pour personnaliser votre environnement et automatiser vos tâches. Avec leur syntaxe simple et leur flexibilité, elles transforment Fish en un compagnon puissant pour les développeurs et les administrateurs système. 🐟

Variables d’Environnement et Leur Gestion Simplifiée dans Fish

Section intitulée « Variables d’Environnement et Leur Gestion Simplifiée dans Fish »

La gestion des variables d’environnement dans Fish est beaucoup plus intuitive que dans les autres shells comme Bash ou Zsh. Avec des commandes claires et des options avancées, vous pouvez facilement manipuler vos variables, les rendre locales, globales ou universelles et les gérer efficacement.

Dans Fish, les variables s’assignent avec la commande set :

Fenêtre de terminal
set nom valeur

Exemple :

Fenêtre de terminal
set username "Alice"
echo $username

Sortie :

Alice

Les variables dans Fish ne nécessitent pas le mot-clé export (comme dans Bash). Elles sont locales par défaut, mais vous pouvez les rendre globales ou universelles (voir plus bas).

Les variables définies avec set sont temporaires et ne survivent qu’à la session actuelle. Pour rendre une variable persistante, ajoutez-la au fichier de configuration ~/.config/fish/config.fish.

Exemple :

Fenêtre de terminal
vim ~/.config/fish/config.fish

Ajoutez cette ligne :

Fenêtre de terminal
set -gx PATH $PATH:/nouveau/chemin

Rechargez votre configuration :

Fenêtre de terminal
source ~/.config/fish/config.fish

Dans Fish, les variables peuvent avoir différentes portées :

  • Locale (par défaut) : Valide uniquement dans le scope où elle est définie, comme une fonction.

    Fenêtre de terminal
    function test_variable
    set -l local_var "Je suis local"
    echo $local_var
    end
  • Globale : Disponible dans toute la session actuelle.

    Fenêtre de terminal
    set -g global_var "Je suis globale"
    echo $global_var
  • Universelle : Partagée entre toutes les sessions Fish et persistante.

    Fenêtre de terminal
    set -U universal_var "Je suis universelle"

Pour supprimer une variable, utilisez simplement set -e :

Fenêtre de terminal
set -e variable_a_supprimer

Vous pouvez afficher toutes les variables actuellement définies dans votre session Fish avec :

Fenêtre de terminal
set

Pour afficher uniquement une variable spécifique, utilisez :

Fenêtre de terminal
echo $nom_de_la_variable

Le $PATH est une variable d’environnement importante qui indique où chercher les exécutables. Avec Fish, vous pouvez facilement le modifier :

  • Ajouter un chemin au $PATH :

    Fenêtre de terminal
    set -U PATH $PATH /chemin/supplementaire
  • Afficher les chemins actuels :

    Fenêtre de terminal
    echo $PATH
  • Retirer un chemin :

    Fenêtre de terminal
    set -U PATH (string match -v /chemin/supplementaire $PATH)

Fish permet d’utiliser des substitutions pour attribuer des valeurs dynamiques aux variables.

  • Exemple avec une commande :

    Fenêtre de terminal
    set date_actuelle (date)
    echo $date_actuelle
  • Exemple avec une liste :

    Fenêtre de terminal
    set fichiers (ls)
    echo $fichiers

Les variables définies dans un script sont locales par défaut. Vous pouvez les passer en argument pour les manipuler dynamiquement :

Fenêtre de terminal
function afficher
echo "Argument 1 : $argv[1]"
echo "Argument 2 : $argv[2]"
end
afficher "Bonjour" "Fish"

Sortie :

Argument 1 : Bonjour
Argument 2 : Fish

Avec Fish, la gestion des variables d’environnement est intuitive et puissante. Que vous travailliez avec des variables locales, globales ou universelles, Fish vous offre des outils simplifiés et ergonomiques pour gérer votre environnement efficacement. 😊

En 2025, Fish est reconnu comme l’un des meilleurs shells modernes pour son ergonomie et sa simplicité. Il est particulièrement prisé des développeurs, des administrateurs système et même des débutants. Pourquoi ? Parce qu’il combine les atouts suivants :

  • Une interface intuitive avec des couleurs, des suggestions et une gestion avancée des commandes.
  • Une compatibilité avec la plupart des outils de l’écosystème Unix.
  • Une communauté active, qui continue de développer des plugins et des thèmes pour enrichir l’expérience utilisateur.

Fish n’est pas seulement un outil, c’est une philosophie : faire plus, avec moins de complications. Sa trajectoire, de projet marginal à shell incontournable, prouve qu’il a su répondre à un besoin réel. Aujourd’hui, il n’est pas rare de voir des équipes entières de développeurs basculer sur Fish, séduits par son approche résolument moderne.

Et vous, êtes-vous prêt à rejoindre l’aventure Fish ? 🐟