##############################
bash 命令行的标准补全.
##############################
1. 命令补全
只记住了命令的前几个字符,敲tab 键,自动补全,常用
2. 文件和目录补全
敲完命令后,后面的参数敲了几个字符后按tab键,自动补全单词.常用
3. 变量名补全
启用方式:在美元符号 ($) 之后,按TAB 键, bash 将自动启动变量名补全
工作原理: 它会显示 env 命令中的所有变量
举例:
$echo $[tab][tab]
4. 用户名补全
启用方式:在波浪号 (~) 之后,按TAB 键, bash 将自动启动用户名补全(并不是搜索主目录下用户目录)
工作原理: 它会显示 /etc/passwd 文件中的所有可用用户名
举例:
$cd ~[tab][tab]
5. 主机名补全
启用方式:在地址符 (@) 之后,按TAB 键, bash 将自动启动主机名补全
工作原理: 它大概搜索了/etc/host 文件, 补全内容用途不大!
举例:
$ssh root@[tab][tab]
####################################
bash_completion: bash 的高级完成功能
####################################
/etc/bash_completion, 若不存在,通过apt-get安装名为 bash_completion 的包
主要是通过一些内置的bash 函数进行了功能扩充。我的版本172个函数,见后.
1.查看现有的bash-completion
$ complete -p 或者只打complete 可以列出当前定义的bash 完成
------------------------------
1.1. 用命令扩展完成.
------------------------------
例如:
$ complete |grep which
complete -c which
说明which 支持命令扩展
则
$ which [tab][tab]
会列出所有可用的命令
也可以用命令 $complete -p which 来查询which 的完成方式,
同样显示:
complete -c which
------------------------------
1.2. 用函数扩展完成
------------------------------
$ complete |grep ls 或者 complete -p ls
complete -F _longopt ls
ls --[tab][tab]
------------------------------
1.3. bash_completion 全貌
------------------------------
$ complete |awk '{print $1 " " $2}' |sort |uniq -c
1 complete -a //alias 补全
4 complete -A //不太理解,据说是指动作?
1 complete -b //buildin 命令补全
2 complete -c //用命令补全
172 complete -F //用函数功能来补全
3 complete -j //用后台作业来补全
8 complete -o // -o 是选项,后面还是function 补全
4 complete -u //user 补全
2 complete -v //variable 补全
help complete, 有收获再继续补充! ...
1.4. 怎样书写自己的bash_complete 函数, 待续.
1.5 ./configure --[tab][tab] 会列出configure 命令的所有选项.
这是bash 对configure 的特别的关照, 它会自动调用./configure --help 并过滤出--选项呈现到你面前, 如果是./configure --list-[tab][tab], 则会显示出所有以 --list-开头的选项!!!
倘若你把configure 换成别的名字, 例如cp configure mytest, 则mytest 就没有该自动补全功能了.
所以说,bash 功能强大,很难有别的shell 与之匹敌, 就算emacs shell 相比,也只是各有千秋.