adwin's blog
解决Ubuntu下命令参数不能补全问题(其他Linux系统应该也适用)
post by:adwin 2018-11-30 15:18

在某个不知名的小小小小小IDC买了个测试机器测试用,在想要安装环境的时候发现,终端输入apt-get ins之后不管怎么tab,install就是不能补全,就更别提后边的包名了。 

在网上搜了一下,大概就是修改/etc/bash.bashrc,可是我修改之后并没有效果,后来几经查证后才发现,原来,命令参数的补全,真的不是我以前想象的那样,系统本身就会帮助你去补全,其功能本身竟然其依赖第三方插件实现的,这个以前还真没注意。我买的是测试用的小机器,很小很小,内存只有512,所以系统肯定也是精简的系统,精简到什么程度呢,他家的机器,最起初连vim都没有,编辑个文件还需要用vi,后来经过我的建议之后才加进去。

废话不多说,那么怎么解决呢?首先我的系统由于是精简的,所以并没有安装实现参数补全功能的包,那么我们首先就要安装这个名字叫bash-completion的包:

apt-get install bash-completion

但其实一般情况下系统是会自带这个包的,这也就是为什么我们平时用的系统都可以实现参数补全,因为系统默认自带了这个包。centos下也是一样的包名,只不过换成yum安装就可以了。

 安装好之后,就是按照网上说的方法,修改/etc/bash.bashrc,找到如下内容:

 # enable bash completion in interactive shells

if ! shopt -oq posix; then

  if [ -f /usr/share/bash-completion/bash_completion ]; then

    . /usr/share/bash-completion/bash_completion

  elif [ -f /etc/bash_completion ]; then

    . /etc/bash_completion

  fi

fi

按照网上的说法,这段本来是注释掉的,把这个注释打开就好了。我打开这个文件之后,发现这段确实本来是注释掉的,可是我打开注释之后还是一样,不好用,我甚至重启了一次也是不行。
我在想问题出在哪,后来我突然想起来,在我的~目录,也就是家目录(家目录的说法好像是怪怪的,但是如果说home目录的话往往会被误会是/home这个目录,但是你知道,很多时候~目录并不是/home这个目录),有一个隐藏的.bashrc文件,我想系统肯定是会先寻找~目录下的bashrc文件把,找不到才去/etc/bash.bashrc,所以我打开~/.bashrc之后看到如下相关的内容:
# enable programmable completion features (you don't need to enable
# this, if it's already enabled in /etc/bash.bashrc and /etc/profile
# sources /etc/bash.bashrc).
if [ -f /etc/bash_completion ] && ! shopt -oq posix; then
    . /etc/bash_completion
fi
当然了,下边的代码本身是注释掉的,我懒得把#再加上去了,我把这段代码打开之后再source .bashrc发现就可以补全了,输入apt-get ins之后一个tab,就能把install补全了,而且要安装的包名也能补全了。

实际上,仅仅是bash-completion和环境变量而已,之前不知道,还以为参数补全是系统本身具有的能力。以上方法一般来说应该也适用于其他Linux系统吧,比如centOS,但是没有亲自测试。
评论:
免费节点
2019-04-09 18:47 回复
不错,感谢!
绅士
2020-01-22 10:28 回复
有点儿专业哈!
发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容