Em zsh, onde precmd_functions estão definidas?

3

Se em zsh, eu digito set e vejo precmd_functions=(_precmd_function_dostuff _precmd_function_domore) .

Onde estão _precmd_function_dostuff e _precmd_function_domore definidos (isto é, eles são definidos em um arquivo? qual arquivo?)?

Eu posso digitar functions para ver as definições de _precmd_function_dostuff e _precmd_function_domore , mas isso não me diz onde elas estão definidas.

    
por user3731622 20.03.2018 / 17:53

1 resposta

4

No zsh 5.3 ou superior,

type _precmd_function_domore

deve retornar algo como

_precmd_function_domore is a shell function from /usr/local/etc/zshrc.d/80-PetaLinux

Com zsh 5,4 ou acima, você também pode usar:

echo $functions_source[_precmd_function_domore]

Quando você executa zsh com a opção xtrace (como com zsh -x ), ele grava informações de depuração no stderr que mostra todos os comandos que executa (não as definições de função). Você pode modificar a variável $PS4 (a variável de prompt usada para a saída xtrace , consulte info zsh PS4 ) para fornecer mais informações, como para cada comando executado, de qual arquivo e em cada linha o comando foi lido de.

PS4='+%x:%I> ' zsh -x 2> >(grep precmd_func)

Executaria uma nova instância do shell zsh interactive, com o stderr filtrado pelo grep para mostrar as linhas que contêm precmd_func .

Ou com zsh , você pode invocar essa função _precmd_function_domore em xtrace e com %x:%I em $PS4 para ver onde a definição da função foi lida:

$ grep -n precmd ~/.zshrc
192:precmd_foo() echo foo
$ (PS4='+%x:%I> '; set -x; precmd_foo)
+zsh:2> precmd_foo
+/home/stephane/.zshrc:194> echo foo
foo

(note o número da linha off-by-two aqui).

    
por 20.03.2018 / 18:35

Tags