TAB自动补全如何找到要补全的选项?

TAB自动补全如何找到要补全的选项?

它如何自动完成别名?

答案1

取决于命令:

  • 有人可能编写了一个函数来生成可能的参数补全,包括选项。您将在/etc/bash_completion.d/*(或某些系统上的不同位置)找到某些命令的函数。这些函数已注册到complete 内置(例如,当您按下命令时complete -F _find find告诉 bash 调用该函数)。他们使用_findTabfindcompgen内置告诉 bash“这里是可能的完成”。
  • 对于某些命令,bash 将使用参数调用命令--help并解析输出。此类命令可以注册到complete内置的,例如complete -F _longopt ls_longopt实际上是一个完成生成函数,它恰好解析命令的输出而不是使用固定列表。 (还有其他更专门的完成函数,可以解析命令的输出以生成可能的完成;查看/etc/bash_completion.d/*示例。)
  • 对于别名之类的东西,完成函数会在 bash 的内部表中查找它们。这complete内置有相应的选项,例如-A别名。

答案2

看一下文件

/etc/bash_completion

并观察目录中的文件:

/etc/bash_completion.d

你会找到答案的。

答案3

Debian 和 Ubuntu 中提供了对 bash 补全的支持bash补全包。您通常还需要取消注释以下内容/etc/bash.bashrc和/或.bashrc获取 bash 完成文件的源代码。以下内容来自/etc/bash.bashrc

# enable bash completion in interactive shells
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi

为了这个工作。我通常在两者中都取消注释。 Debian 中交互/登录 shell 的处理有点混乱。

类似的评论可能适用于其他发行版,尽管它们可能默认启用采购。

相关内容