Recherche de site Web

Comment gérer les fonctions dans le shell Fish sous Linux


La commande functions dans le shell Fish est utilisée pour gérer et interagir avec les fonctions Fish. Elle vous permet de lister, modifier, effacer et même enregistrer des fonctions. Dans ce tutoriel, nous allons apprendre comment gérer les fonctions dans le shell Fish avec des exemples sous Linux.

Qu'est-ce que la commande functions ?

Dans le shell Fish, les fonctions sont des blocs de code réutilisables que vous pouvez définir et appeler par leur nom. La commande functions est un utilitaire intégré qui vous aide à gérer ces fonctions. Vous pouvez l'utiliser pour :

  • Listez toutes les fonctions.
  • Afficher le code d'une fonction spécifique.
  • Modifier une fonction.
  • Effacer (supprimer) une fonction.
  • Enregistrer les fonctions dans un fichier.

Quand et pourquoi utiliser la commande functions ?

  • Efficacité : Gérez et modifiez rapidement les fonctions sans éditer manuellement les fichiers de configuration.
  • Débogage : Inspectez et dépannez les fonctions facilement.
  • Portabilité : Enregistrez et partagez des fonctions entre les systèmes.
  • Flexibilité : Remplacez ou étendez les commandes intégrées avec un comportement personnalisé.

Gérer les fonctions dans Fish Shell

1. Définir (Créer) une Nouvelle Fonction

Il existe deux façons de définir une nouvelle fonction. Vous pouvez soit la définir directement dans le fichier de configuration de fish (~/.config/fish/config.fish), soit la définir dans un fichier séparé à l'intérieur d'un répertoire personnalisé (par exemple ~/.config/fish/functions/).

La principale différence entre définir une fonction dans ~/.config/fish/config.fish et l'enregistrer dans ~/.config/fish/functions/ réside dans la façon dont Fish gère le chargement et l'exécution des fonctions.

1.1. Définir une fonction dans config.fish

Lorsque vous ajoutez une fonction directement dans ~/.config/fish/config.fish, elle s'exécute à chaque fois qu'un nouveau shell Fish démarre.

Exemple :

function cdls
    # Change to the specified directory
    builtin cd $argv[1]
    and begin
        # List directory contents with a timeout of 1 second
        echo "Changed to directory: $PWD"
        timeout 1s ls -l
    end
end

Avantages :

  • S'exécute lorsque Fish démarre.
  • Bon pour les petites fonctions ou les personnalisations rapides.

Inconvénients :

  • Si vous avez de nombreuses fonctions dans config.fish, cela peut devenir encombré.
  • Les fonctions ne sont chargées que lorsqu'un nouveau shell démarre, ce qui signifie que les modifications nécessitent de redémarrer Fish (exec fish ou de rouvrir le terminal).
  • Démarrage plus lent si config.fish contient de nombreuses fonctions.

1.2. Enregistrer une fonction dans un répertoire personnalisé

Lorsque vous utilisez funcsave function_name ou créez manuellement un fichier dans ~/.config/fish/functions/, Fish charge automatiquement la fonction lorsqu'elle est nécessaire.

Tout d'abord, créez la fonction dans votre session Fish actuelle :

function cdls
    # Change to the specified directory
    builtin cd $argv[1]
    and begin
        # List directory contents with a timeout of 1 second
        echo "Changed to directory: $PWD"
        timeout 1s ls -l
    end
end

À ce stade, la fonction fonctionnera dans votre session, mais elle disparaîtra lorsque vous redémarrerez Fish.

Pour sauvegarder de manière permanente une fonction définie, nous pouvons utiliser la commande funcsave.

funcsave cdls

Cela enregistre cdls dans ~/.config/fish/functions/cdls.fish, contenant :

function cdls
    # Change to the specified directory
    builtin cd $argv[1]
    and begin
        # List directory contents with a timeout of 1 second
        echo "Changed to directory: $PWD"
        timeout 1s ls -l
    end
end

Avantages :

  • Fish charge la fonction seulement lorsqu'elle est utilisée, gardant le démarrage rapide.
  • Les fonctions sont stockées séparément, ce qui les rend plus faciles à gérer.
  • Vous pouvez supprimer une fonction de manière permanente en supprimant son fichier .fish sans modifier config.fish.

Inconvénients :

  • Nécessite une étape supplémentaire pour enregistrer (funcsave nom_de_fonction ou créer manuellement un fichier .fish).
  • Il pourrait ne pas être évident pour les nouveaux utilisateurs où la fonction est stockée.

Meilleure pratique ?

  • Si la fonction est petite et essentielle (par exemple, une fonction de type alias), l'ajouter à config.fish est acceptable.
  • Si la fonction est utilisée occasionnellement ou complexe, il est préférable de la stocker dans ~/.config/fish/functions/ pour une meilleure organisation et performance.

2. Lister toutes les fonctions

Pour voir une liste de toutes les fonctions actuellement définies dans votre shell Fish, utilisez :

functions

Cela affichera les noms de toutes les fonctions, y compris celles intégrées et celles personnalisées que vous avez créées.

Exemple de sortie :

N_, abbr, alias, bg, cd, cdh, cdls, contains_seq, delete-or-exit, diff, dirh,
dirs, disown, down-or-search, edit_command_buffer, export, fg, fish_add_path,
fish_breakpoint_prompt, fish_clipboard_copy, fish_clipboard_paste,
fish_command_not_found, fish_commandline_append, fish_commandline_prepend,
fish_config, fish_default_key_bindings, fish_default_mode_prompt,
fish_git_prompt, fish_greeting, fish_hg_prompt, fish_hybrid_key_bindings,
fish_indent, fish_is_root_user, fish_job_summary, fish_key_reader,
fish_mode_prompt, fish_opt, fish_print_git_action, fish_print_hg_root,
fish_prompt, fish_sigtrap_handler, fish_status_to_signal, fish_svn_prompt,
fish_title, fish_update_completions, fish_vcs_prompt, fish_vi_cursor,
fish_vi_key_bindings, funced, funcsave, grep, help, history, isatty, kill, la,
ll, ls, man, nextd, nextd-or-forward-word, open, popd, prevd,
prevd-or-backward-word, prompt_hostname, prompt_login, prompt_pwd, psub, pushd,
realpath, seq, setenv, suspend, trap, umask, up-or-search, vared, wait

Sortie de commande des fonctions dans le shell Fish

3. Voir la définition d'une fonction

Pour voir le code d'une fonction spécifique, utilisez :

functions <function_name>

Par exemple, pour voir le code de la fonction cdls :

functions cdls

Cela affichera toute la définition de la fonction cd.

function cdls
    # Change to the specified directory
    builtin cd $argv[1]
    and begin
        # List directory contents with a timeout of 1 second
        echo "Changed to directory: $PWD"
        timeout 1s ls -l
    end
end

4. Modifier une fonction

Vous pouvez modifier une fonction directement dans votre éditeur de texte par défaut en utilisant :

funced <function_name>

Par exemple, pour modifier la fonction cd :

funced cdls

Cela ouvrira la fonction dans votre éditeur (par exemple, nano ou vim), vous permettant de la modifier. Une fois que vous aurez enregistré et quitté, les modifications prendront effet immédiatement.

5. Enregistrer une fonction dans un fichier

Ceci est IDENTIQUE à créer de nouvelles fonctions avec la commande funcsave.

Tout d'abord, définissez la fonction dans la session en cours.

Si vous voulez sauvegarder la définition d'une fonction dans un fichier, utilisez :

functions <function_name> > filename.fish

Par exemple, pour enregistrer la fonction cdls dans un fichier :

functions cdls > ~/.config/fish/functions/cdls.fish

Ceci est utile pour sauvegarder ou partager des fonctions.

6. Copier une fonction

Vous pouvez copier une fonction existante sous un nouveau nom en utilisant l'option -c ou --copy :

functions --copy <old_function_name> <new_function_name>

Par exemple, pour copier la fonction cd dans une nouvelle fonction appelée mycd :

functions --copy cd mycd

Vous pouvez maintenant modifier mycd sans affecter la fonction cd originale.

7. Effacer (Supprimer) une fonction

Pour supprimer une fonction de la session en cours, utilisez l'option -e ou --erase :

functions --erase <function_name>

Par exemple, pour supprimer une fonction personnalisée cdls :

functions --erase cdls

Cela supprime cdls mais n'affecte pas les fonctions permanentes stockées dans config.fish ou dans le répertoire ~/.config/fish/functions/.

Pour supprimer définitivement une fonction, ouvrez le fichier de configuration de fish et commentez ou supprimez la fonction entière.

Après avoir supprimé la fonction, rechargez fish pour appliquer les modifications :

exec fish

Ou redémarrez votre Terminal.

Si vous avez enregistré la fonction en utilisant funcsave ou que vous l'avez créée manuellement, Fish la stocke dans ~/.config/fish/functions/.

Pour le supprimer définitivement, il suffit de supprimer le fichier de fonction :

rm ~/.config/fish/functions/function_name.fish

Exemple:

rm ~/.config/fish/functions/cdls.fish

Puis rechargez le poisson ou redémarrez le terminal.

Résumé des options de commande functions

CommandeDescription
fonctionsListez toutes les fonctions.
fonctions <nom_de_fonction>Afficher le code d'une fonction spécifique.
funced <nom_de_fonction>Modifiez une fonction dans votre éditeur de texte par défaut.
fonctions --effacer <nom_de_fonction>Supprimer une fonction.
functions --copy <ancien> <nouveau>Copier une fonction sous un nouveau nom.
functions <nom> > file.fishEnregistrez la définition d'une fonction dans un fichier.

Conclusion

La commande functions est un outil indispensable pour les utilisateurs du shell Fish. Elle vous donne un contrôle total sur votre environnement shell et facilite le travail avec les fonctions. Pour plus de détails, consultez la section sur les fonctions dans la documentation officielle du shell Fish.

Lecture Connexe:

  • Comment changer de répertoire et lister les fichiers en une seule commande dans Fish Shell
  • Comment gérer les fonctions Bash en utilisant la commande declare sous Linux