列出bash功能和位置

时间:2016-02-01 16:44:30

标签: bash shell

我想获得.bashrc中出现的函数及其位置(定义函数的文件)列表或来自那里的任何文件。 E.g。

foo ~/.bashrc
bar ~/.bin/func.sh

可以通过declare获取功能名称,但是它们的位置如何?我认为在.bashrc中获取所有源文件(例如使用egrep '^ *(\.)|(source) ' ~/.bashrc之类的内容),然后遍历declare -F | cut -d' ' -f3并查找.bashrc中的每个函数和源文件。有更简单的方法吗?

P.S。关于列表功能的许多其他问题(例如this),但它们不处理位置。

编辑:我在bash的手册页中找到了以下内容:

  

声明或排版的-F选项将列出         仅限函数名称(如果启用了extdebug shell选项,则可选择源文件和行>编号)。

但是shopt -s extdebug && declare -F不会列出文件。

1 个答案:

答案 0 :(得分:2)

文档没有明确说明,但您需要使用特定函数作为参数调用declare -F,以获取其声明的文件和行号。它可以循环完成:

$ shopt -s extdebug
$ declare -F | while read foo bar fun ; do declare -F "$fun" ;done
$ shopt -u extdebug