您的位置:首页 > 运维架构 > Shell

linux bash 自动补全功能

2016-01-09 21:43 423 查看
当安装好linux,打开terminal终端或通过putty等客户端在windows下登录到linux时,在shell命令行输入命令前几个字符(ser ),然后<Tab>键,会自动列出相匹配的命令或自动补全(仅有一个命令匹配时),这种补全功能还是有点弱弱的感觉,不能完成命令参数、文件、目录等的补全,如:

约定:<Tab>表示按Tab键

man 2 soc<Tab> #不能补全man 2 socket,在写代码时,为了查询某个函数的用法,如果只输入函前几个字符是查询不到man手册的

grep --<Tab> #也没有显示

service <Tab> #不能显示所有的服务

等等。虽然bash自带的补全功能满足日常的命令补全了,但总感觉还不够,在偶然的机会,接触了bash-completion,一个增强版的补全工具,可以补全命令参数、文件、目录等很多信息,还可以自定义补全功能,下面切入主题吧:

一、bash-completion能帮我们干什么

输入命令或一部分命令,然后<Tab>键,能列出或补全相应的内容,这样解析太抽象了,详见下面的例子:

1) [root@localhost] man 2 soc<Tab> #自动补全如下:

[root@localhost] man 2 socket<Enter> #将显示socket()函数的man手册

2) [root@localhost] man 2 socket<Tab><Tab> 将显示所有以socket开头的函数,如下:

[root@localhost] man 2 socket

socket socketcall socketpair

3)[root@localhost] serivce <Tab><Tab>

[root@localhost ~]# service

Display all 124 possibilities? (y or n)

abrt-ccpp hypervvssd plymouth-quit systemd-ask-password-wall

abrtd ip6tables plymouth-quit-wait systemd-binfmt

..........................

#为了节省篇幅,只列出一部分系统服务(由上面的Display all 124 possibilities?(y or n)可以看出,本机一共有124个服务)

这还不算什么,接着看下面的补全:

[root@localhost ~]# service iptables <Tab><Tab> #则补全为:

[root@localhost ~]# service iptables st

start stop

[root@localhost ~]# service iptables st

既然系统自带的bash完成不了这些功能,那么如何把bash-completion集成到我们系统中呢?

二、bash-completion的安装

1、下载

在官网(http://bash-completion.alioth.debian.org/)下载最新稳定发布版本,目前稳定版本是:bash-completion-2.1.tar.bz2

打开命令行终端,进入/home/download目录,执行下面的命令

[root@localhost download]wget http://bash-completion.alioth.debian.org/files/bash-completion-2.1.tar.bz2

2、编译与安装

下载完成后,命令下面的命令解压:

bunzip2 bash-completion-2.1.tar.bz2

tar -xvf bash-completion-2.1.tar
然后进入bash-completion目录,如果有时间建议大家阅读一下安装目录的README文件,说的比较详细,如果不想阅读,就跟我一起来吧:
依次执行下面的命令:

./configure

make

make check

make install
(默认情况安装在了/usr/share/bash_completion/目录,不同的系统可能会有不同的安装目录,建议看一下最后几行日志,会指明安装在了哪里)
3、注意事项
不知道是笔者电脑问题还是bash-completion-2.1存在bug,执行完make install以后还需要做如下的事情才能使用bash-completion的自动补全功能

I、编译完成后,源码目录的bash_completion.sh并没有copy到/etc目录(README文件说执行完make install如果没有错误就可以正常使用了,但经笔者摸索后发现,,需要手动拷贝:
先更改脚本为可执行状态:chmod +x bash_completion.sh
再拷贝:copy bash_completion.sh /etc
II、修改/etc/bashrc配置文件如下(前提是:~/.bashrc文件引用了/etc/bashrc文件,否则请直接将下面的四行copy到~/.bashrc文件中,请别告诉我不会使用vi/vim编辑文件)
#bash-completion
fi [ -f /etc/bash_completion.sh ]; then
. /etc/bash_completion.sh
fi
III、完成上述步骤后,执行下面的命令:
source ~/.bashrc

4、以上步骤如果均没有发生错误那么,就可以在当前会话见到效果了<命令的最后均是按两次tab键>:
service <Tab><Tab>



man 2 socket<Tab><Tab>



grep --<Tab><Tab>



到此,bash-completion自带的命令补全功能算是完成了,那么如果编写自己的脚本完成属于自己的补全呢?请待下回分解。

在使用中如果有任何问题,请第一时间联系作者,谢谢!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: