检测 bash 中是否存在 Bash 完成


检测

bash 完成包是否加载到我的 bash shell 中的方法是什么?从 bash-completion 的 2.1 版本(包含在 Debian 8 中)开始,除了 BASH_COMPLETION_COMPAT_DIR 之外,没有 shell 变量可以指示这一点,这不是一个可靠的指标。

可以使用带有-p选项的 complete 命令来获取所有或特定完成的列表。我也不确定这有多可靠,因为您可以随意加载和卸载它们。

complete -p

另一种选择是使用 type 命令检查其中一个更独特的函数名称,并查看它是否是一个函数。

type -t _get_comp_words_by_ref

这个问题和答案也可能提供一些见解。

  1. 转到同时包含文件和子目录的目录。

  2. 键入 cd <TAB><TAB> 并查看自动完成结果列表。

如果自动完成结果仅包含目录(不包含文件),则会安装 Bash 完成。

如果自动完成结果包含文件,则不会安装 Bash 完成。(一个例子是,如果你在 Docker Ubuntu 容器中尝试这样做)。

最新更新