如何在终端中打印 shell 函数的代码?

如何在终端中打印 shell 函数的代码?

我正在使用zsh并且在一些 shell 脚本中定义了一些实用 shell 函数,其中很少有从 调用~/.zshrc,所以我们假设我们不知道这些函数的位置。一项功能是:

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
}

如何打印该 shell 函数的代码?

我可以想到这样的搜索和 grep:

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

但这假设我大致知道位置,但这里不正确。

答案1

为此目的functions有内置命令zsh

functions k.pstree.n

例如我的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 
}

或者使用which 的好处是也可以在,和中工作。typeset -fp function_namekshbashyash

在 中zsh,函数定义也可以在$functions特殊的关联数组中找到(键是函数名,值是函数体)。

答案2

你可以使用哪个命令:

$ which k.pstree.n

相关内容