Macos 如何在Mac OS X上为Docker添加bash命令完成?

Macos 如何在Mac OS X上为Docker添加bash命令完成?,macos,docker,Macos,Docker,我正在运行docker,我想要bash命令完成docker命令和参数。如果您已经bash完成只需将docker完成脚本安装到bash_completion.d curl -XGET https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker > $(brew --prefix)/etc/bash_completion.d/docker 注意:如果您没有安装自制bash complet

我正在运行docker,我想要
bash
命令完成
docker
命令和参数。

如果您已经
bash完成
只需将docker完成脚本安装到
bash_completion.d

curl -XGET https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker > $(brew --prefix)/etc/bash_completion.d/docker
注意:如果您没有安装自制
bash completion
,请在执行上述行之前安装它


注意:完成取决于中定义的某些函数。因此,如中所述,仅获取docker完成脚本可能不起作用。如果您试图完成
docker run
(通过点击TAB键),您可能会得到一个错误,如
\u ltrim\u colon\u completions:command not found
。这可能意味着您尚未安装bash完成脚本

docker的自动完成不仅是mac需要的,也是ubuntu/bash终端需要的

在Ubuntu中

curl -ksSL https://raw.githubusercontent.com/docker/cli/master/contrib/completion/bash/docker |sudo tee /etc/bash_completion.d/docker
下一次登录时即可完成

由于它在谷歌的排名第一,我在这里添加了答案。

我只想说: 如果您使用:
brew安装docker
我会做你需要的一切。它包括
brew链接docker
,它将完成安装到
`brew--prefix`/etc/bash_completion.d/docker
相同的主题,相同的答案,适用于
docker机器
docker compose
,等等


否则(可能您正在使用Docker Beta版(不带Virtualbox的新“更原生”Docker安装包)您仍然需要手动添加它,然后跟随plus查看docker machine、docker compose和一些shell helper的其他完成脚本,这些脚本在

中处理。完成脚本随docker Beta一起提供。我希望它们保持最新。因此,在OS X上

  • 安装自制的bash完成
  • 符号链接文件

    find /Applications/Docker.app \
    -type f -name "*.bash-completion" \
    -exec ln -s "{}" "$(brew --prefix)/etc/bash_completion.d/" \;
    

我的绊脚石是,一旦brew安装了bash Competition,您必须在.bash_配置文件中添加几行,以便在启动终端后加载它:

if [ -f $(brew --prefix)/etc/bash_completion ]; then
. $(brew --prefix)/etc/bash_completion
fi
资料来源:

因为我在任何地方都找不到分步文档,所以我制作了一个快速脚本来安装homebrew、bash completion以及docker的最终完成脚本。

Mac的官方Docker页面有一节介绍如何安装bash completion:

如果已安装自制bash completion:

cd /usr/local/etc/bash_completion.d
ln -s /Applications/Docker.app/Contents/Resources/etc/docker.bash-completion
ln -s /Applications/Docker.app/Contents/Resources/etc/docker-machine.bash-completion
ln -s /Applications/Docker.app/Contents/Resources/etc/docker-compose.bash-completion

在Mac OSX上为ZSH设置自动完成指南

如果您使用的是oh my zsh自动完成功能不起作用,请按照以下步骤操作:

第1步:

做好以下三个环节:

ln-s/Applications/Docker.app/Contents/Resources/etc/Docker.zsh-completion/usr/local/share/zsh/site functions/\u Docker

ln-s/Applications/Docker.app/Contents/Resources/etc/Docker-compose.zsh-completion/usr/local/share/zsh/site functions/\u Docker-compose

第二步:

自动加载-Uz compinit;compinit
添加到
.zshrc


运行
echo“autoload-Uz compinit;compinit”>.zshrc
在shell中

Docker官方网站有一个用于命令行完成的部分,Mac可以:

帮助我自制:

brew install bash-completion
安装后,Brew将显示安装路径。从文档中可以看出:

/usr/local/etc/bash_completion.d/

运行脚本:

sudo curl -L https://raw.githubusercontent.com/docker/compose/1.25.4/contrib/completion/bash/docker-compose -o /usr/local/etc/bash_completion.d/docker-compose
打开并在文件末尾添加以下内容
~/.bash\u profile

if [ -f $(brew --prefix)/etc/bash_completion ]; then
 . $(brew --prefix)/etc/bash_completion
 fi

重新启动终端。就这样。

我已经安装了
bash completion
,并将docker completion脚本放在适当的目录中。但是命令completion仍然不起作用(我没有收到任何错误)。我是否也需要通过自制软件安装
bash
?或者它是否可以与Mavericks附带的bash一起使用?很抱歉,docker完成文件是空的,因为curl命令由于证书错误而失败。它正在工作。如果使用-XGET而不是-GET:
curl-XGET,curl命令可以工作https://raw.githubusercontent.com/docker/docker/master/contrib/completion/bash/docker>`brew--prefix`/etc/bash_completion.d/docker
我无法让它工作。我使用的是Macbook,我使用标准的.pkg文件而不是brew安装了docker。我缺少什么?请看@Hypno comment,它为我修复了macOS上新的本机docker,这是一篇文章这将是最新的答案。谢谢!如果/当他们将
kubectl
的完成添加到列表中时,这将非常方便。@Hypno链接已断开。对于使用MacPorts的用户,您需要
sudo-s;port安装bash completion;cd/opt/local/etc/bash_completion.d
,然后从那里开始。您可能需要将登录shell设置为
/opt/l>ocal/bin/bash
chsh
(请参阅
manchsh
,或讨论)。如果担心永久更改,Terminal.app和iTerm还允许您设置非默认shell。