GNU/Linux >> Znalost Linux >  >> Linux

Vyhledání zdroje funkce v zsh

Potřeboval jsem to udělat dnes a zjistil jsem, že whence -v vypíše soubor obsahující definici funkce.

$ whence -v function_name
function_name is a shell function from /path/to/file

Za prvé, funkce může být definována bez function klíčové slovo, takže lepší vyhledávání by bylo

grep 'cp()' .*

To prohledá soubory jako .zshrc a .profile a co ne. Pokud to nic nenajde, možná budete chtít vidět také různé soubory načtené zsh . Ty jsou uvedeny na samém konci 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)

Ve výchozím nastavení $ZDOTDIR by mělo být vaše $HOME . Tento příkaz by tedy měl najít váš problematický soubor:

grep 'cp()\|cp ()' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin /etc/zsh/zshenv \
 /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin 

Přidal jsem \| protože můžete mít také mezery mezi názvem funkce a funkcí samotnou. Nakonec @Dennis zdůrazňuje, že závorky lze také vynechat, pokud použijete function klíčové slovo. Takže, abyste byli ještě bezpečnější, udělejte toto:

grep -E 'function cp|cp *\(\)' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin \
  /etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin 

Novější verze zsh (od 5.4, přidáno v commit 34f70c5 ) podporuje $functions_source pole jako součást zsh/parameter modul (dokumentace:man zshmodules ):

functions_source

Toto asociativní pole pouze pro čtení mapuje názvy povolených funkcí na název souboru obsahujícího zdroj funkce.

Pro automaticky načtenou funkci, která již byla načtena nebo označena pro automatické načtení absolutní cestou nebo u které byla její cesta vyřešena pomocí ‘functions -r “, toto je soubor nalezený pro automatické načítání, vyřešený na absolutní cestu.

Pro funkci definovanou v těle skriptu nebo zdrojového souboru se jedná o název tohoto souboru. V tomto případě se jedná o přesnou cestu původně použitou k tomuto souboru, což může být relativní cesta.

Pro jakoukoli jinou funkci, včetně jakékoli definované v interaktivní výzvě nebo funkce automatického načítání, jejíž cesta ještě nebyla vyřešena, je to prázdný řetězec. Prvek hash je však hlášen jako definovaný, dokud je přítomna funkce:klíče k tomuto hash jsou stejné jako klíče k $funcions .

Takže můžete

echo $functions_source[cp]

Linux
  1. Funkce kořene uživatelské skupiny??

  2. Příkaz k zavření okna?

  3. Jak upravit zdroj Html ve schránce?

  1. Kde je funkce itoa v Linuxu?

  2. Spuštění funkce uživatelského prostoru z prostoru jádra

  3. Přidání nové položky do proměnné PATH v ZSH

  1. Kde najdu verzi zdrojového stromu linuxového jádra?

  2. Jaký je aktuální zdrojový kód jádra Linuxu?

  3. Co je zdrojem mentality zkompilujte si sami v linuxu