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]