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]