我在
中有一堆bash完成文件 /usr/local/etc/bash_completion.d
其中的大多数脚本在其底部都具有以下内容:
complete -F _tmux tmux
以上是针对tmux的。
我的问题是-默认情况下,这些文件看起来不像bash吗? 我在网上看到一些有关执行以下操作的说明:
for f in '/usr/local/etc/bash_completion.d/'*; do
source "$f"
done;
我需要手动执行此操作吗,还是bash应该立即执行此操作?
答案 0 :(得分:2)
这取决于您的平台和/或 bash 和 bash-completion 的版本。例如:
在 Ubuntu 20.04 上,文件 /etc/bash_completion
执行以下操作:
. /usr/share/bash-completion/bash_completion
在那个文件中我找到
for dir in ${XDG_DATA_DIRS:-/usr/local/share:/usr/share}; do
dirs+=( $dir/bash-completion/completions )
done
这表明 /usr/local/share/bash-completion/completions
是 扫描完成脚本。实证实验支持这一点。
我在 MacOS 11.2.3 上的 /etc
或 /usr/share
中找不到任何有关 bash 补全的信息。这表明裸达尔文没有 bash 完成,这是有道理的,因为 Apple 由于许可而将 Bash 保留在 3.2。可能有 zsh
,不过,我没看。
/usr/local/etc/bash-completion.d
是 /usr/local
下 Homebrew 安装的一部分。在那里我找到了一些完成脚本,但没有找到激活脚本。您不必自己明确激活这些。
我确实从 /usr/local/share/bash-completion
中找到了 Homebrew
,它有脚本 bash_completion
。其中与 Ubuntu 相同,这也是有道理的,因为 Homebrew
是一个完整的“GNU”,但在 /usr/local
之下。但它也引用了目录 /usr/local/etc/bash-completion.d
。 Sourcing /usr/local/share/bash-completion/bash_completion
也从该目录添加了完成。
但是 /usr/local/share/bash-completion/bash_completion
默认不会执行,因此您必须将其添加到 ~/bash_profile
或 ~/profile
中,如 here 所述。它还描述了如何处理 zsh
和 fish
。
Cygwin
是另一个具有 bash 补全功能的 Posix 兼容环境。 (不过,我还没有检查 bash 补全是否属于 Posix 标准的一部分)安装 bash-completion
软件包后,Ubuntu 和 Homebrew 就有了 /usr/share/bash-completion/bash_completion
。这里没有 /etc/bash_completion
并且因为我(很久以前生成)的 ~/.bashrc
只寻找这个补全没有被激活。
许多类似 GNU 的环境都支持 bash_completion,但您可能必须
如果它在您的环境中默认未激活,您可以通过从您的 {{1 }}、/etc
或类似内容。
我猜测 YMMV 适用于所有其他可能的平台(其他 Linux 发行版、MSYS2 等),但以上内容可能会帮助您弄清楚如何启用完成。这在可用时真的很有帮助。