我正在使用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_name
ksh
bash
yash
在 中zsh
,函数定义也可以在$functions
特殊的关联数组中找到(键是函数名,值是函数体)。
答案2
你可以使用哪个命令:
$ which k.pstree.n