我在Mac上运行的docker容器中使用kubectl。我已经成功配置了kubectl的bash完成功能,可以在Mac上运行,但是,它在docker容器中不起作用。我总是得到bash: _get_comp_words_by_ref: command not found
。
docker镜像基于ubuntu:16.04
,kubectl通过该行安装(来自dockerfile的代码段)
curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl && \
mv kubectl /usr/local/bin
echo $BASH_VERSION
给了我4.3.48(1)-release
,根据apt,安装了bash-completion
包。
我使用iTerm2作为终端。
知道它为什么不起作用或如何让它起作用?
答案 0 :(得分:6)
好的,我发现了 - 我只需要在source /etc/bash_completion
之前或之后做source <(kubectl completion bash)
。
答案 1 :(得分:0)
在macOS上执行的Linux容器创建了一个单独的环境 是的,它看起来像是来自macOS shell的线程,但事实并非如此。壳牌历史, 属性,功能是一个不同的故事。 此外,如果容器没有安装持久性卷,则所有这些参数都将被转换,并且不会在容器重启后继续存在。
完成两者的bash完成的方法 - macOS和Ubuntu Linux类似,但需要采取不同的步骤:
macOS方面 - 对kubectl bash完成的永久支持:
使用homebrew安装支持:
brew install bash-completion
kubectl completion bash > $(brew --prefix)/etc/bash_completion.d/kubectl
Ubuntu容器的方法是使用kubectl和bash完成支持:
您可以调整这组命令并在映像准备期间在Dockerfile中使用它:
apt-get update && apt-get install -y apt-transport-https
curl -s https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add -
cat <<EOF >/etc/apt/sources.list.d/kubernetes.list
deb http://apt.kubernetes.io/ kubernetes-xenial main
EOF
apt-get update
apt-get install -y kubectl
echo 'source <(kubectl completion bash)' >> ~/.bashrc
如果之后您或用户在运行容器中执行/ bin / bash,那么您应该完成工作。
docker exec -it docker_image_id /bin/bash
这会在bash完成时启动bash shell。
答案 2 :(得分:0)
检查.bashrc
启用可编程完成功能(您不需要启用 这个,如果它已经在 /etc/bash.bashrc 和 /etc/profile 中启用 来源/etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
. /etc/bash_completion
fi