bash-completion
1.1、bash-completion简介

在使用Bash命令行时,在提示符下,输入某个命令的前面几个字符, 然后按TAB键,就会列出以这几个字符开头的命令供我们选择。 不光如此,还可以进行参数补全,但只限于文件参数,当输入到参数部分时,按TAB键, 就会列出以这个参数开头的文件路径供我们选择。

Bash提供了一个complete内建命令,它的用途是规定参数怎么自动补全。 有了它,第三方开发的命令就可以根据自己的实际情况指定自动提示功能了!

查看详细的自动补全规则:

man complete

bash-completion通过一个复杂的脚本实现可编程的补全程序,减少系统管理员日常维护工作,减少差错,提高工作效率。 使用它,你只需要做简单的配置,其他复杂配置都让该软件自己做了。

bash-completionGitHub上的网址:https://github.com/scop/bash-completion

1.2、通过包管理器安装bash-completion
操作系统包管理器安装命令
macOSHomeBrewbrew install bash-completion
GNU/LinuxLinuxBrewbrew install bash-completion
apt-getsudo apt-get install -y bash-completion
CentOSyumsudo yum install -y bash-completion
Fedoradnfsudo dnf install -y bash-completion
Alpine Linuxapksudo apk add bash-completion

Arch Linux

Manjaro Linux

pacmansudo pacman -Syyu --noconfirm
sudo pacman -S    --noconfirm bash-completion
1.3、配置bash-completion

实际上,要想让bash-completion起作用,必须在Bash启动的时候, 加载一段名字为bash_completionBash脚本! 而对于使用了不同的安装方法,这个脚本的位置也不同:

如果你使用的是apt-get或者yum进行安装的, 那么bash_completion这个脚本文件的位置在/usr/local/etc/bash_completion

如果你使用的是LinuxBrew进行安装的, 那么bash_completion这个脚本文件的位置在~/.linuxbrew/etc/bash_completion

如果你使用的是HomeBrew进行安装的, 那么bash-completion这个脚本文件的位置在/usr/local/etc/bash_completion

配置到Bash的环境变量配置文件中,最好配置到/etc/profile里面, 这样就是全部用户都支持了!如果配置到~/.bash_profile里面,就只能当前用户使用了。

下面是一个配置示例:

[ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion

配置的方法很简单,其实就是判断这个文件是否存在,如果存在就使用.命令加载这个文件, 需要注意的是.命令是Bash特有的命令, 其他的Shell很可能没有这个命令!

1.4、扩展bash-completion

很多特有命令的自动补全支持不在bash-completion内,这时候可以手动添加进去。 比如gitdocker等经常使用的命令。

安装bash-completion之后,一般会生成一个bash_completion.d的目录, 这个目录下的配置会被bash_completion加载,所以不用配置,只是,你需要把自己的配置脚本放到这个目录下!

bash_completion.d这个目录在哪儿呢?可以搜索一下:

sudo find / -name "bash_completion.d"

这样就可以找到了!

1.4.1、添加git的自动补全
cd /usr/local/etc/bash_completion.d
curl -L -O https://raw.github.com/git/git/master/contrib/completion/git-completion.bash

重启Bash生效。

1.4.2、添加docker的自动补全
cd /usr/local/etc/bash_completion.d
curl -L -O https://raw.githubusercontent.com/docker/compose/$(docker-compose version --short)/contrib/completion/bash/docker-compose

重启Bash生效。