Como imprimir o código de uma função shell no terminal?

5

Estou usando o zsh e defini algumas funções do utilitário em alguns shell scripts, alguns deles chamados de ~ / .zshrc, então vamos supor que não sabemos a localização dessas funções. Uma função é:

function k.pstree.n {
    if [ "$1" != "" ]
    then
        pstree -p | grep -C3 "$1"
    else
        printf "  Please specify the name of the process you want to show!\n"
    fi
}

Como posso imprimir o código dessa função de shell?

Eu posso pensar em uma pesquisa & grep como:

find $(pwd) -name "*sh*" -type f -printf "\"%p\"\n" | xargs grep -C5 "k.pstree.n"

mas isso pressupõe que eu saiba aproximadamente a localização que não é verdadeira aqui.

Alguma sugestão? Obrigado!

    
por Kyr 07.11.2014 / 12:25

1 resposta

8

Existe um comando interno functions in zsh para este propósito

functions k.pstree.n

Por exemplo, no caso da minha função preexec :

$ functions preexec

preexec () {
    local cmd=${1:-}
    cmd=${cmd//\/\\} 
    [[ "$TERM" =~ screen* ]] && cmd="S $cmd" 
    inf=$(print -Pn "%n@%m: %3~") 
    print -n "\e]2;$cmd $inf\a"
    cmd_start=$SECONDS 
}

Ou use typeset -fp function_name , que tem o benefício de também trabalhar em ksh , bash e yash .

Em zsh , a definição da função também está disponível na matriz associativa especial $functions (a chave é o nome da função, o valor do corpo da função).

    
por 07.11.2014 / 12:29

Tags