它如何自动完成别名?
答案1
取决于命令:
- 有人可能编写了一个函数来生成可能的参数补全,包括选项。您将在
/etc/bash_completion.d/*
(或某些系统上的不同位置)找到某些命令的函数。这些函数已注册到complete
内置(例如,当您按下命令时complete -F _find find
告诉 bash 调用该函数)。他们使用_find
Tabfind
compgen
内置告诉 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 的处理有点混乱。
类似的评论可能适用于其他发行版,尽管它们可能默认启用采购。