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
endAvantages :
- 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 fishou de rouvrir le terminal). - Démarrage plus lent si
config.fishcontient 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 cdlsCela 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
endAvantages :
- 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
.fishsans modifierconfig.fish.
Inconvénients :
- Nécessite une étape supplémentaire pour enregistrer (
funcsave nom_de_fonctionou 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.fishest 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 :
functionsCela 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, wait3. 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 cdlsCela 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
end4. 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 cdlsCela 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.fishPar exemple, pour enregistrer la fonction cdls dans un fichier :
functions cdls > ~/.config/fish/functions/cdls.fishCeci 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 mycdVous 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 cdlsCela 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 fishOu 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.fishExemple:
rm ~/.config/fish/functions/cdls.fishPuis rechargez le poisson ou redémarrez le terminal.
Résumé des options de commande functions
| Commande | Description |
|---|---|
fonctions | Listez 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.fish | Enregistrez 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
