Ich musste das heute tun und habe diesen whence -v
gefunden gibt die Datei mit der Funktionsdefinition aus.
$ whence -v function_name
function_name is a shell function from /path/to/file
Zunächst einmal kann eine Funktion ohne den function
definiert werden Schlüsselwort, damit eine bessere Suche wäre
grep 'cp()' .*
Dadurch werden Dateien wie .zshrc
durchsucht und .profile
und was nicht. Wenn das nichts findet, möchten Sie vielleicht auch die verschiedenen Dateien sehen, die von zsh
geladen wurden . Diese sind ganz am Ende von man zsh
aufgeführt :
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)
Standardmäßig $ZDOTDIR
sollte Ihr $HOME
sein . Dieser Befehl sollte also Ihre problematische Datei finden:
grep 'cp()\|cp ()' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin /etc/zsh/zshenv \
/etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin
Ich habe den \|
hinzugefügt da Sie auch Leerzeichen zwischen dem Funktionsnamen und der Funktion selbst haben können. Schließlich weist @Dennis darauf hin, dass die Klammern auch weggelassen werden können, wenn Sie den function
verwenden Stichwort. Um noch sicherer zu sein, tun Sie dies:
grep -E 'function cp|cp *\(\)' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin \
/etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin
Neuere Versionen von zsh (seit 5.4, hinzugefügt in Commit 34f70c5
) unterstützt den $functions_source
-Array als Teil von zsh/parameter
Modul (Dokumentation:man zshmodules
):
functions_source
Dieses schreibgeschützte assoziative Array ordnet die Namen aktivierter Funktionen dem Namen der Datei zu, die die Quelle der Funktion enthält.
Für eine automatisch geladene Funktion, die bereits geladen oder mit einem absoluten Pfad zum automatischen Laden markiert wurde oder deren Pfad mit „functions -r
aufgelöst wurde ’, das ist die zum automatischen Laden gefundene Datei, aufgelöst in einen absoluten Pfad.
Für eine im Hauptteil eines Skripts oder einer Quelldatei definierte Funktion ist dies der Name dieser Datei. In diesem Fall ist dies der genaue Pfad, der ursprünglich zu dieser Datei verwendet wurde, wobei es sich um einen relativen Pfad handeln kann.
Für jede andere Funktion, einschließlich aller an einer interaktiven Eingabeaufforderung oder einer Autoload-Funktion, deren Pfad noch nicht aufgelöst wurde, ist dies die leere Zeichenfolge. Das Hash-Element wird jedoch nur so lange als definiert gemeldet, wie die Funktion vorhanden ist:Die Schlüssel zu diesem Hash sind die gleichen wie die zu $funcions
.
Sie können also tun
echo $functions_source[cp]