【问题标题】:Why doesn't kubectl bash completion work on macOS/OS X?为什么 kubectl bash 补全在 macOS/OS X 上不起作用?
【发布时间】:2017-07-21 15:00:21
【问题描述】:
我按照kubectl completion -h 给出的安装 Bash 补全的说明进行操作:
- 我通过 Homebrew 安装了
bash-completion
- 在我的
~/.bashrc 中,我首先获取bash-completion,然后从完成kubectl 子命令输出:
source $(brew --prefix)/etc/bash_completion
source <(kubectl completion bash)
有了这些,我启动了一个新的 shell,但完成不起作用。如何让它工作?
【问题讨论】:
标签:
bash
kubernetes
homebrew
bash-completion
kubectl
【解决方案1】:
一旦 Homebrew 安装了 bash-completion,它的完成似乎
需要居住在$(brew --prefix)/etc/bash_completion.d。在那里你会发现很多捆绑在一起的其他完成。添加 kubectl 的补全:
$ kubectl completion bash > $(brew --prefix)/etc/bash_completion.d/kubectl
这对我有用。
【解决方案2】:
我是 Ahmet B 的答案,修复程序说要将以下内容添加到您的 .bashrc 文件中:
export BASH_COMPLETION_COMPAT_DIR="/usr/local/etc/bash_completion.d"
[[ -r "/usr/local/etc/profile.d/bash_completion.sh" ]] && . "/usr/local/etc/profile.d/bash_completion.sh"
但是,完成 2 的安装:
brew install bash-completion@2
如果您想使用 V1 完成,则以添加导出行的消息结尾。删除该导出为我启用了 kubectl 完成。
【解决方案4】:
- 在
brew install bash-completion 之后,要真正启用 bash 补全,您需要:
source /usr/local/etc/profile.d/bash_completion.sh
将该行添加给您bashrc。
- 然后您可以:
source <(kubectl completion bash)
【解决方案5】:
以上答案对我不起作用,但我发现this解决方案:
source /dev/stdin <<<"$(kubectl completion bash)"
【解决方案6】:
这是另一种方法:
安装 bash 和 bash-completion
brew install bash bash-completion
设置终端使用 bash
Preferences > General > Shell open with: Command (complete path):
/opt/homebrew/bin/bash
检查 bash-completion 已安装到的位置
brew info bash-completion
Bash 补全已安装到:
/opt/homebrew/etc/bash_completion.d
编辑 ~/.bashrc
alias k="kubectl"
complete -F __start_kubectl k
source /opt/homebrew/etc/profile.d/bash_completion.sh
source <(kubectl completion bash)
重新加载终端并验证完成工作
~$ k <TAB>
alpha auth cordon diff 获取补丁运行版本
注释自动缩放cp ...
环境
- macOS 蒙特雷 12.2.1
- 自制 3.3.15
- GNU bash,版本 5.1.16(1)-release (aarch64-apple-darwin21.1.0)
- bash 完成:稳定 1.3(瓶装)
- kubectl v1.23.3