Comment afficher la définition d'une fonction en zsh? type foo
ne donne pas la définition.
En bash:
bash$ function foo() { echo hello; }
bash$ foo
hello
bash$ type foo
foo is a function
foo ()
{
echo hello
}
En zsh:
zsh$ function foo() { echo hello; }
zsh$ foo
hello
zsh$ type foo
foo is a Shell function
L'idiome zsh est whence
, le -f
le drapeau imprime les définitions des fonctions:
zsh$ whence -f foo
foo () {
echo hello
}
zsh$
Dans zsh, type
est défini comme équivalent à whence -v
, vous pouvez donc continuer à utiliser type
, mais vous devrez utiliser le -f
argument:
zsh$ type -f foo
foo () {
echo hello
}
zsh$
Et, enfin, dans zsh which
est défini comme équivalent à whence -c
- affiche les résultats au format semblable à csh, donc which foo
donnera les mêmes résultats.
man zshbuiltins
pour tout cela.
J'ai toujours utilisé which
pour cela.
tl; dr
declare -f foo # works in zsh and bash
typeset -f foo # works in zsh, bash, and ksh
type -f
/whence -f
/which
sont sous-optimales dans ce cas, car leur but est de signaler le formulaire de commande avec la priorité la plus élevée qui se trouve être défini par ce name (sauf si vous spécifiez également -a
, auquel cas tous les formulaires de commande sont signalés) - par opposition à un rapport spécifique sur l'opérande en tant que fonction .
L'option -f
Ne change pas cela - elle inclut uniquement les fonctions Shell dans la recherche.
Les alias et les mots clés Shell ont une priorité plus élevée que les fonctions Shell, donc, dans le cas présent, si un alias foo
était également défini, type -f foo
Indiquerait la définition de l'alias .
Notez que zsh
développe les alias dans les scripts par défaut (tout comme ksh
, mais pas bash
), et même si vous désactivez d'abord l'expansion d'alias, type -f
/whence -f
/which
toujours signalent d'abord les alias.
Si vous n'êtes pas sûr de ce que vous recherchez, vous pouvez taper
functions
et il vous montrera toutes les fonctions définies.
Notez qu'il y en a parfois BEAUCOUP, donc vous voudrez peut-être diriger vers un programme de pagination:
functions | less
pour annuler la définition d'une fonction, utilisez
unfunction functionname