GNU/Linux >> Linux Esercitazione >  >> Linux

Individuazione dell'origine di una funzione in zsh

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]

Linux
  1. Reindirizzamento allo stesso file del file di origine elaborato dal comando?

  2. Qual è il simbolo Newline nella Ps1 di Zsh?

  3. Il comando per chiudere una finestra?

  4. Dove trovo la versione di un albero dei sorgenti del kernel Linux?

  5. Qual è la fonte della mentalità di compilarlo da soli in Linux

Come installare l'ultima versione di OpenSSL da Source su Linux

Ohcount - Il contatore e l'analizzatore di linee di codice sorgente

WAZUH La piattaforma di sicurezza open source

La funzione dell'elenco dei dispositivi loop?

Installa Awesome Zsh e rendilo la shell predefinita

Qual è l'attuale sorgente del kernel Linux?