又写了一句: 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
参考:
发表评论
要发表评论,您必须先登录。