Linux Shell 自动补全
一直使用 kubectl 操作 k8s 集群,每次都需要查看 pod 名字、查看 service 名字等,比较麻烦,看了 kubectl 官方就支持 bash 自动补全,所以记录一下。
官方文档地址:https://kubernetes.io/zh/docs/tasks/tools/included/optional-kubectl-configs-bash-linux/
本文以 Ubuntu20.04 下的 kubectl 为例
Bash 自动补全
kubectl 的 Bash 补全脚本可以用命令 kubectl completion bash 生成。 在 shell 中导入(Sourcing)补全脚本,将启用 kubectl 自动补全功能。
然而,补全脚本依赖于工具 bash-completion
, 所以要先安装它(可以用命令 type _init_completion
检查 bash-completion
是否已安装)。
安装 bash-completion
很多包管理工具均支持 bash-completion。 可以通过 apt-get install bash-completion
或 yum install bash-completion
等命令来安装它。
上述命令将创建文件 /usr/share/bash-completion/bash_completion
,它是 bash-completion 的主脚本。 依据包管理工具的实际情况,你需要在 ~/.bashrc 文件中手工导入此文件。
用户级和系统级二选一,用户级表示系统内所有用户都生效,用户级只对当前用户生效
用户级别开启 bash_completion
在 ~/.bashrc
最后面添加两行
1 | source /usr/share/bash-completion/bash_completion |
系统层级开启 bash_completion
把 /etc/bash.bashrc
如下几行的注释取消
1 | # enable bash completion in interactive shells |
bash-completion 负责导入 /etc/bash_completion.d
目录中的所有补全脚本。
1 | kubectl completion bash | sudo tee /etc/bash_completion.d/kubectl > /dev/null |
关联 kubectl 别名
如果 kubectl 有关联的别名,你可以扩展 shell 补全来适配此别名:
1 | echo 'alias k=kubectl' >>~/.bashrc |
ZSH 自动补全
kubectl 通过命令 kubectl completion zsh 生成 Zsh 自动补全脚本。 在 shell 中导入(Sourcing)该自动补全脚本,将启动 kubectl 自动补全功能。
为了在所有的 shell 会话中实现此功能,请将下面内容加入到文件 ~/.zshrc
中。
1 | source <(kubectl completion zsh) |
如果你为 kubectl 定义了别名,可以扩展脚本补全,以兼容该别名。
1 | echo 'alias k=kubectl' >>~/.zshrc |
重新加载 shell 后,kubectl 自动补全功能将立即生效。
如果你收到 complete:13: command not found: compdef
这样的错误提示,那请将下面内容添加到 ~/.zshrc
文件的开头:
1 | autoload -Uz compinit |