`functions` in bash shell



在Z shell中有一个方便的命令,它返回所有可用函数的列表。该命令方便地称为functions。我在Bash找不到类似的替代方案。我把一个快速&dirty(也是完全不可接受的)函数来近似地做同样的事情,但它至少有一个明显的问题:由于它依赖于解析文件,所以必须列出所有要查找的文件(这可能会变得过时),或者给出一个表达式(这保证会给出你不想查找的文件,如.bash_history)。

这是一个功能,因为我知道如果我不发布它,有人会要求它,但我很确定这是一条死胡同,或者至少是错误的方法。

functions() {
  grep "^function " "$HOME/."{bashrc,bash_profile,aliases,functions,projects,variables} | sort | sed -e 's/{//' | uniq
}

我可以通过解析.bash_profile并获得所有源文件的列表,然后对它们进行函数解析来改进这种错误的方法,但当你在组合中添加以下复杂内容时,这真的不值得:

  1. 可以使用.source源文件
  2. 我还碰巧使用了一个函数来源文件,它首先检查文件的存在
  3. 您可以很容易地在&&;之后查找:它不一定是一行中的第一个或唯一一个
  4. 您必须考虑这样一个事实,即函数前面不一定有关键字function
  5. 您可以省略函数名称后面的()
  6. 可能还有其他我没有想到的复杂因素
  7. 从根本上说,这是错误的,因为它是在解析文件,而不是报告内存中加载的内容

有什么合理的方法可以做到这一点吗;获取内存中加载的所有函数的列表—在Bash?如果不是的话,这似乎是一个巨大的遗漏。

(对于那些寻找重复问题的人来说,这一个非常不同,因为它要求一种只列出来自特定文件的函数的方法。)

bash中使用typeset -f。在zsh中,functions只是同一命令的同义词。

最新更新