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