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自带的命令补全功能算是完成了,那么如果编写自己的脚本完成属于自己的补全呢?请待下回分解。
在使用中如果有任何问题,请第一时间联系作者,谢谢!
约定:<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自带的命令补全功能算是完成了,那么如果编写自己的脚本完成属于自己的补全呢?请待下回分解。
在使用中如果有任何问题,请第一时间联系作者,谢谢!
相关文章推荐
- -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such fi
- Windows下写shell脚本到Linux下执行遇到的问题及解决方案
- erlang接入远程shell
- Shell 排序大文件
- 给shell脚本中加上执行日志
- shell 简介 编程 应用
- 利用commands模块执行Linux shell命令
- ovirt-shell 使用
- ssh信任,scp远程到本地不输密码
- awk与shell变量互相赋值
- -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
- HDFS Shell 常用命令
- Linux FTP Shell
- RHEL / CentOS Bash命令自动完成功能
- linux在shell中获取时间
- shell export 作用
- 替换shell变量里的字符方法
- 使用ShellExecute打开默认程序(邮件客户端)
- shell命令之根据字符串查询文件对应行记录
- xshell,winscp无法用root用户登录