Dovevo farlo oggi e ho trovato che whence -v
restituisce il file contenente la definizione della funzione.
$ whence -v function_name
function_name is a shell function from /path/to/file
Prima di tutto, una funzione può essere definita senza il function
parola chiave quindi una ricerca migliore sarebbe
grep 'cp()' .*
Questo cercherà attraverso file come .zshrc
e .profile
e quant'altro. Se questo non trova nulla, potresti anche voler vedere i vari file caricati da zsh
. Questi sono elencati alla fine di 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)
Di default $ZDOTDIR
dovrebbe essere il tuo $HOME
. Quindi, questo comando dovrebbe trovare il tuo file offensivo:
grep 'cp()\|cp ()' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin /etc/zsh/zshenv \
/etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin
Ho aggiunto l'\|
poiché puoi anche avere spazi tra il nome della funzione e la funzione stessa. Infine, @Dennis sottolinea che le parentesi possono anche essere omesse se si utilizza il function
parola chiave. Quindi, per essere ancora più sicuro, fai questo:
grep -E 'function cp|cp *\(\)' ~/.zshenv ~/.zprofile ~/.zshrc ~/.zlogin \
/etc/zsh/zshenv /etc/zsh/zprofile /etc/zsh/zshrc /etc/zsh/zlogin
Versioni più recenti di zsh (dalla 5.4, aggiunte nel commit 34f70c5
) supporta il $functions_source
array come parte del zsh/parameter
modulo (documentazione:man zshmodules
):
functions_source
Questo array associativo di sola lettura associa i nomi delle funzioni abilitate al nome del file contenente l'origine della funzione.
Per una funzione caricata automaticamente che è già stata caricata o contrassegnata per il caricamento automatico con un percorso assoluto o il cui percorso è stato risolto con "
functions -r
', questo è il file trovato per il caricamento automatico, risolto in un percorso assoluto.Per una funzione definita all'interno del corpo di uno script o di un file di origine, questo è il nome del file. In questo caso, questo è il percorso esatto originariamente utilizzato per quel file, che potrebbe essere un percorso relativo.
Per qualsiasi altra funzione, incluse quelle definite in un prompt interattivo o una funzione di caricamento automatico il cui percorso non è stato ancora risolto, questa è la stringa vuota. Tuttavia, l'elemento hash viene riportato come definito fintanto che la funzione è presente:le chiavi di questo hash sono le stesse di quelle di
$funcions
.
Quindi, puoi farlo
echo $functions_source[cp]