经常大家会碰到这种现象,Docker 已经安装好了,但是使用 docker 命令时 不能自动补齐,即输入 docker 命令后,按 Tab 键无法列出子命令(或参数)的候选项。

【机制】

Linux 系统许多命令都会提供该命令自身的命令补齐脚本,在安装命令时会自动安装自动补齐脚本,如果有的话,该机制在Linux中被称为 bash-complete。

在 /usr/share/bash-completion/completions/ 目录下有许多命令自动补齐的脚本,可自行查阅。

与 docker 有关的,有 2 个文件: docker 和 docker-compose。如下:

[root@docker ~]# ls  /usr/share/bash-completion/completions/docker*
/usr/share/bash-completion/completions/docker
/usr/share/bash-completion/completions/docker-compose

备注:如果没有安装 docker compose,那么只有一个 docker 自动补齐脚本)

自动补齐需要依赖工具 bash-complete,如果没有,则需要手动安装,命令如下:

[root@docker ~]# yum -y install bash-completion

安装成功后,得到文件为  /usr/share/bash-completion/bash_completion  ,如果没有这个文件,则说明系统上没有安装这个工具。

【实践】

让配置脚本生效的方法是执行 source xxx 命令,先执行 source /usr/share/bash-completion/completions/docker,再输入 docker,然后按2次 Tab键,提示错误如下:

[root@docker ~]# docker  (docker + 空格 + 连续按2次Tab键)
docker bash: _get_comp_words_by_ref: command not found
bash: [: : integer expression expected
bash: [: : integer expression expected
bash: [: : integer expression expected
bash: _get_comp_words_by_ref: command not found
bash: [: : integer expression expected
bash: [: : integer expression expected
bash: [: : integer expression expected

注:第一行的docker,实际是输入的命令,其它是按Tab键的输出信息。

前面已经安装了 bash_completion,执行如下命令:

[root@docker ~]# source /usr/share/bash-completion/bash_completion

再次尝试,发现可以正常列出docker的子命令,示例如下:

[root@docker ~]# docker  (docker + 空格 + 连续按2次Tab键)
attach container engine history inspect logs port restart search stats top volume
build context events image kill network ps rm secret stop trust wait
builder cp exec images load node pull rmi service swarm unpause
commit create export import login pause push run stack system update
config diff help info logout plugin rename save start tag version

尝试 Docker 容器名称的自动补齐功能,示例如下:

[root@docker ~]# docker logs izheng-  (注:输入izheng-后按2次Tab键)
izheng-wordpress izheng-apache izheng-mysql
izheng-zentao izheng-gitlab izheng-jenkins

若安装了 Docker Compose,则也可事实 docker-compose 命令的自动补齐功能。

重启系统后,也能进行自动补齐。

【小结】

在 Linux 系统下,掌握了 Tab键 的自动补齐功能,可以减少大量的命令输入工作,提高工作效率。

Docker笔记7:Docker 命令自动补齐的更多相关文章

  1. Linux 命令自动补齐快捷键

    Linux 命令自动补齐快捷键 : TAB

  2. linux下的命令自动补齐增强

    linux 7 下 安装 bash-completion 可以实现命令的参数的自动补齐

  3. Docker 命令自动补全?要的

    前言 不知道这个小伙伴有多久没用过 Docker 了, 突然对我说 Docker 命令怎么发生变化了 docker run ... #变成了 docker container run ... 他说,本 ...

  4. Docker笔记--操作容器命令

    Docker笔记--操作容器命令 创建容器 docker [container] create-- 创建容器,使用docker [container] create命令新建的容器处于停止状态,可以使用 ...

  5. 小技巧--tab键自动补齐Git命令

    Git是什么,你不清楚? 好吧,那么该篇内容对你也木有帮助,请绕道而行.. 我们在使用Git命令时,可以通过tab键,自动补齐Git,特别是在切换分支时特别有用. 如下,当我们想将当前分支切换到bug ...

  6. kubernetes系列(小知识):kubectl命令自动补全

    kubectl命令自动补全 linux系统 yum install -y bash-completion source /usr/share/bash-completion/completions/d ...

  7. CentOS 7下的Vim自动补齐插件YouCompleteMe安装及配置

    备注:现在对于 YouCompleteMe 的安装应采用更为简单的方法,即利用 Vundle 来安装这个插件.具体方法可见: Vundle 主页 YouCompleteMe 主页 而 .vimrc 的 ...

  8. 为kubectl配置别名和命令行补齐

    配置别名 # vim ~/.bashrc 添加 alias k='kubectl' # source ~/.bashrc 配置命令行补齐 # yum install -y bash-completio ...

  9. CocoaPods 导入第三方库头文件自动补齐

    使用了一段时间CocoaPods来管理Objective-c的类库,方便了不少.但是有一个小问题,当我在xcode输入import关键字的时候,没有自动联想补齐代码的功能,需要手工敲全了文件名,难以适 ...

随机推荐

  1. java返回树形结构的正确姿势

    业务场景 通常我们前端需要一个树形的导航菜单或者分类菜单,如后台权限管理中的权限树,亦或者下面例子中商城系统的商品分类多级菜单(一般为三级菜单) 数据库设计 数据库设计,采用parentId来指向自己 ...

  2. codeforces 1262D Optimal Subsequences 主席树询问第k小

    题意 给定长度为\(n\)的序列\(a\),以及m个询问\(<k,pos>\),每次询问满足下列条件的子序列中第\(pos\)位的值为多少. 子序列长度为\(k\) 序列和是所有长度为\( ...

  3. Oracle数据库时提示“ORA-28000

    当使用SQL*Plus登录时,Oracle数据库时提示“ORA-28000:帐号被锁定”. 导致出现改错误的原因是:在oracle database 11g中,默认在default概要文件中设置了“F ...

  4. Fabric1.4 kafka共识的多orderer集群

    https://www.cnblogs.com/zhangmingcheng/p/10556469.html#FeedBack https://yq.aliyun.com/articles/63746 ...

  5. Linux:mysql编译安装

    mysql安装包有源码包和二进制包.源码包安装时需要编译.二进制包安装时不需要编译. 二进制格式的包名字很长,都带有版本号.适应平台.适应的硬件类型等,而源码格式仅仅就是一个版本号的tar包. 源代码 ...

  6. 高可用服务之Keepalived利用脚本实现服务的可用性检测

    上一篇博客主要聊到了keepalived高可用LVS集群的相关配置,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13659428.html:keepalive ...

  7. python中的n次方表示法 **n

    例题:计算2的n次方,n由用户输入(N次方用**表示)# n=eval(input('手动输入n的值:')) #个人感觉,不确定是int还是float时,用eval来表示,eval后面接表达式# pr ...

  8. Unit5:广播

    静态广播 1.定义 public class TestBroadCast extends BroadcastReceiver { @Override public void onReceive(Con ...

  9. [LeetCode]剑指 Offer 52. 两个链表的第一个公共节点

    题解 nodeA走一个链表A(A独有+公共),再走B独有的长度, nodeB走一个链表B(B独有+公共),再走A独有的长度. 结果:两者相遇点即为交点:若没有交点,两者都走到null,会返回null. ...

  10. 自然常数e的含义

    e是一个重要的常数,但是它的直观含义却不像 π 那么明了.我们都知道,圆的周长与直径之比是一个常数,这个常数被称为圆周率,记作 π = 3.14159......可是e代表什么呢? e是“指数”(ex ...