GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Lokalisieren der Quelle einer Funktion in zsh

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]

Linux
  1. Wo ist die Itoa-Funktion in Linux?

  2. Ausführen einer User-Space-Funktion aus dem Kernel-Space

  3. Wo finde ich die Version eines Linux-Kernel-Quellbaums?

  4. Was ist die aktuelle Linux-Kernelquelle?

  5. Was ist die Quelle der Compiler-it-yourself-Mentalität unter Linux?

Linux treibt das Internet an, bestätigt EU-Kommissar

So installieren Sie die neueste OpenSSL-Version von Source unter Linux

Ohcount – Der Quellcode-Zeilenzähler und -Analysator

WAZUH Die Open-Source-Sicherheitsplattform

Die Funktion der Liste der Loop-Geräte?

Installieren Sie das Awesome Zsh und machen Sie es zur Standard-Shell