GNU/Linux >> Tutoriels Linux >  >> Linux

Localisation de la source d'une fonction dans zsh

J'avais besoin de le faire aujourd'hui et j'ai trouvé que whence -v génère le fichier contenant la définition de la fonction.

$ whence -v function_name
function_name is a shell function from /path/to/file

Tout d'abord, une fonction peut être définie sans le function mot-clé pour une meilleure recherche serait

grep 'cp()' .*

Cela recherchera dans des fichiers tels que .zshrc et .profile et ainsi de suite. Si cela ne trouve rien, vous voudrez peut-être aussi voir les différents fichiers chargés par zsh . Ceux-ci sont listés à la toute fin de man zsh :

FILES
       $ZDOTDIR/.zshenv
       $ZDOTDIR/.zprofile
       $ZDOTDIR/.zshrc
       $ZDOTDIR/.zlogin
       $ZDOTDIR/.zlogout
       ${TMPPREFIX}*   (default is /tmp/zsh*)
       /etc/zsh/zshenv
       /etc/zsh/zprofile
       /etc/zsh/zshrc
       /etc/zsh/zlogin
       /etc/zsh/zlogout    (installation-specific - /etc is the default)

Par défaut $ZDOTDIR devrait être votre $HOME . Donc, cette commande devrait trouver votre fichier incriminé :

grep 'cp()\|cp ()' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin /etc/zsh/zshenv \
 /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin 

J'ai ajouté le \| puisque vous pouvez également avoir des espaces entre le nom de la fonction et la fonction elle-même. Enfin, @Dennis souligne que les parenthèses peuvent également être omises si vous utilisez le function mot-clé. Donc, pour être encore plus sûr, procédez comme suit :

grep -E 'function cp|cp *\(\)' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin \
  /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin 

Nouvelles versions de zsh (depuis la 5.4, ajoutées dans le commit 34f70c5 ) prend en charge le $functions_source tableau dans le cadre du zsh/parameter modules (documentation :man zshmodules ):

functions_source

Ce tableau associatif en lecture seule associe les noms des fonctions activées au nom du fichier contenant la source de la fonction.

Pour une fonction chargée automatiquement qui a déjà été chargée, ou marquée pour le chargement automatique avec un chemin absolu, ou dont le chemin a été résolu avec 'functions -r ', il s'agit du fichier trouvé pour le chargement automatique, résolu en un chemin absolu.

Pour une fonction définie dans le corps d'un script ou d'un fichier sourcé, il s'agit du nom de ce fichier. Dans ce cas, il s'agit du chemin exact utilisé à l'origine pour ce fichier, qui peut être un chemin relatif.

Pour toute autre fonction, y compris toute fonction définie à une invite interactive ou une fonction de chargement automatique dont le chemin n'a pas encore été résolu, il s'agit de la chaîne vide. Cependant, l'élément de hachage est signalé comme défini tant que la fonction est présente :les clés de ce hachage sont les mêmes que celles de $funcions .

Donc, vous pouvez faire

echo $functions_source[cp]

Linux
  1. La fonction de la racine du groupe d'utilisateurs ? ?

  2. Rediriger vers le même fichier que le fichier source traité par la commande ?

  3. Exécuter une fonction de l'espace utilisateur à partir de l'espace noyau

  4. Ajout d'une nouvelle entrée à la variable PATH dans ZSH

  5. Où puis-je trouver la version d'une arborescence des sources du noyau Linux ?

Comment installer la dernière version d'OpenSSL à partir de la source sous Linux

Ohcount - Le compteur et l'analyseur de lignes de code source

WAZUH La plateforme de sécurité open source

La Fonction De La Liste Des Périphériques De Boucle ??

Installez Awesome Zsh et faites-en le shell par défaut

Quelle est la source de la mentalité compilez-le vous-même sous Linux