又写了一句: sudo apt-get install … , 忽然觉得最近老是用这个命令来安装,于是加了一句这样alias,来简化:
alias apt-install=”sudo apt-get install”
装着装着,又发现了,这样用原来与从前有些不同:少了自动补全……
原先包名每打完,可以通过tab键列出可能的报名进行选择。
于是,查找了一些资料,发现在ubuntu,bash命令行的自动补全,是使用compete & compgen命令完成。全局自动补全的内容写在:“/etc/bash_completion” 和 “/etc/bash_completion.d”下。
新建/etc/bash_completion.d/apt-install,在里面添加内容:
1 function _apt_install(){
2 COMPREPLY=()
3 local cur=${COMP_WORDS[COMP_CWORD]}
4 local com=${COMP_WORDS[COMP_CWORD-1]}
5 COMPREPLY=($(apt-cache --no-generate pkgnames "$cur" 2> /dev/null))
6 }
7
8 complete -F _apt_install apt-install
退出终端,重新登录,你就会发现apt-install命令也有自动提示啦!!!
这边没有使用到compgen,compgen主要的用途是根据命令的前缀,在某集合里寻找匹配前缀的关键字,如下:
compgen -W “abcd abc ab efg ef d” — a
会在”abcd abc ab efg ef d”中寻找a开头的关键字,并输出到控制台。
该命令通常用来生成变量COMPREPLY的内容。
complete 和 compgen似乎没有什么文档,大家可以通过“help complete”,“help compgen”,得到一些提示。
下面还有一个例子:
function _abc() {
COMPREPLY=()
local cur=${COMP_WORDS[COMP_CWORD]};
local com=${COMP_WORDS[COMP_CWORD-1]};
case $com in
'abc')
COMPREPLY=($(compgen -W 'build_all compile update' -- $cur))
;;
'compile')
local pro=($(awk '{print $1}' project.list))
COMPREPLY=($(compgen -W '${pro[@]}' -- $cur))
;;
*)
;;
esac
return 0
}
complete -F _abc abc
参考:
发表评论
要发表评论,您必须先登录。