linux - 如何获得 shell 脚本中的函数列表?

标签 linux list function shell typeset

我想生成一个 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/

相关文章:

linux - 使用 sed 命令替换文件中的行

database - 使用 Shell 脚本检查数据库连接

linux - 从 linux 服务器到 windows 服务器的 Jenkins 部署

list - 理解守卫功能和列表理解

android - 等待进程完成以启动另一个进程

c - 修改抓包包头

flutter - Dart/Flutter 按多个字段对列表进行排序

postgresql - Postgres : ERROR: value too long for type character(4)

javascript - 是否可以将这些相似的功能合并为一个功能?

python - 子列表的计数值