我想生成一个 shell 脚本(我采购的 shell 脚本函数库)中所有函数的列表。目前,我正在尝试通过以下方式进行排版:
typeset -f
typeset -F
typeset -F | awk -F"declare -f " '{print $2}' | grep -v '_'
我遇到的困难是列出了一些不在函数库中的函数,我不知道如何从函数列表中删除这些函数或如何以更好的方式生成函数列表。我欢迎您对此有任何想法。
一个奖励是按照函数在 shell 脚本中出现的顺序生成一个函数列表。
最佳答案
我假设 bash 是 shell。 排版(或声明)显示当前环境,功能是环境的一部分:
- 环境中没有固有的顺序(名称在输出时排序)
- 不需要的功能可能是从环境中继承的,之前已经被 使用 declare -x 标记为导出
您可以尝试使用“env”在干净的环境中启动您的脚本,尝试:
env -i "PATH=$PATH" "TERM=$TERM" "LANG=$LANG" myscript.sh
作为起点。
在 bash 中枚举函数的最佳方法记录在此处:Where is function's declaration in bash? 请注意,“declare -F”不会规范化文件名,它将被调用/来源。
while read xx yy fn; do
func=( $(shopt -s extdebug; declare -F $fn) )
printf "%-30s %4i %-30s\n" "${func[@]:2}" "${func[1]}" "${func[0]}"
done < <(declare -F)
您需要做的就是按所需文件名过滤,然后按行号排序。
关于linux - 如何获得 shell 脚本中的函数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14213044/