Wie um zu zeigen, zsh-Funktion definition (wie bash "type myfunc")?
Wie kann ich zeigen Sie die definition einer Funktion in der zsh? type foo
gibt nicht die definition.
In der bash:
bash$ function foo() { echo hello; }
bash$ foo
hello
bash$ type foo
foo is a function
foo ()
{
echo hello
}
In zsh:
zsh$ function foo() { echo hello; }
zsh$ foo
hello
zsh$ type foo
foo is a shell function
declare -f foo
ist die bessere Wahl, auch in der bash - und es funktioniert inzsh
zu; siehe meine Antwort für den hintergrund.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem zsh idiom ist
whence
, die-f
flag druckt Funktion Definitionen:In zsh,
type
ist definiert als äquivalent zuwhence -v
, so können Sie weiterhintype
, aber Sie müssen verwenden Sie die-f
argument:Und schließlich, in der zsh
which
ist definiert als äquivalent zuwhence -c
- Druck-Ergebnisse in csh- - format, sowhich foo
führt zu den gleichen Ergebnissen.man zshbuiltins
für all dies.-f
wird in der Antwort, die nicht "drucken" - Funktion Definitionentype -f foo
tut dies auch;type
entsprichtwhence -v
.whence -f
,type -f
,which
Bericht die höchste Priorität form des Befehls).which
aus/etc/profile.d/which2.sh
", die aus derwhich
Paket.type
/whence -v
erhalten Sie den Dateinamen, wo die Funktion definiert ist: zum Beispiel den Befehltype rvm_prompt_info
gibtrvm_prompt_info is a shell function from /home/cristian/.oh-my-zsh/lib/prompt_info_functions.zsh
Ich habe immer nur verwendet
which
für diese.which
Berichte der höchsten Rangfolge form des Befehls).tl;dr
type -f
/whence -f
/which
sind suboptimal in diesem Fall, weil Ihr Zweck ist es, zu berichten, der Befehl die form mit der höchste Priorität, dass passiert, definiert werden mit diesem Namen (es sei denn, Sie geben auch-a
, in dem Fall alle Befehl Formulare gemeldet werden) - im Gegensatz zu insbesondere die Berichterstattung über die Operanden als Funktion.Den
-f
option nicht zu ändern, dass - es nur umfasst shell-Funktionen in der Suche.Aliase und shell-keywords haben eine höhere Priorität als shell-Funktionen, so dass, in dem Fall bei der hand, wenn ein alias
foo
waren auch definiert,type -f foo
melden würde, der alias definition.Beachten Sie, dass
zsh
dehnt sich aus, Aliase, die in scripts standardmäßig (wieksh
, aber nichtbash
), und selbst wenn Sie die alias-Erweiterung aus der ersten,type -f
/whence -f
/which
noch Bericht Aliase ersten.Wenn Sie sich nicht ganz sicher, was Sie suchen, können Sie geben Sie einfach
und es wird Ihnen zeigen, alle definierten Funktionen.
Beachten Sie, dass manchmal gibt es eine MENGE von Ihnen, so möchten Sie vielleicht eine pipe an einen pager-Programm:
zu löschen eine Funktion, verwenden
functions
entsprichttypeset -f
(außer für die-M
option), so können Sie auch verwenden, die grammatikalisch etwas Kontra-intuitiv-Befehlfunctions foo
um Informationen über eine gegeben - Funktion.