要求 bash 生成命令的完成答案?

要求 bash 生成命令的完成答案?

我正在编写一个名为的 CLI 实用程序环境集,其用法如下:envset [ENVSET-OPTIONS] [SETNAME] [--] [CMD] [ARGS]....
它基本上运行一个带有配置文件中定义的一组环境变量的命令(已经有一个npm 包具有相同的名称,但我正在使用不同的功能集在 Perl 中实现我的实用程序)。

我想为 提供制表符补全envset。完成由 shell 函数处理_envset。如果像下面这样(^表示按下时光标的位置),那就太好了Tab

% envset mycolors -- ls -^

_envset可以返回完整答案ls(因此,返回可能的 ls 命令行选项列表)。有没有一种简单的方法可以让 bash 帮我归还它们?

否则,我必须做类似以下的事情_envset(这并不完美,但对于大多数情况来说应该足够好了):

  1. 解析 的输出complete以查找描述命令(在上面的示例中为ls)如何完成的条目。如果没有,则查找带有-D(默认处理程序)的条目。

  2. 如果命令由函数 (-F) 完成,则调用该函数(在适当设置 COMP_WORDS 和 COMP_CWORD 后)。从函数返回 COMPREPLY。

  3. 如果该命令由外部命令(-C)完成,则运行该命令(在适当设置 COMP_LINE 和 COMP_POINT 后)。捕获输出线并设置 COMPREPLY。

  4. 对于其他类型的处理程序(-W、-G 等),依此类推。我认为处理 -F、-C、-W 和 -A 应该涵盖大多数情况。

  5. 对于默认处理程序,有一种特殊情况,它返回 124,这意味着我们必须从步骤 1 重新启动,以查看处理程序是否已complete为我们想要的命令定义。

相关内容