代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| github() { cd_github_code my_github=git@github.com/cyy053xc/ case $1 in "c"|"clone") git clone $my_github$2".git" ;; "l"|"pull") pushd $my_github$2 git pull popd ;; "s"|"push") pushd $my_github$2 git pull git commit -am 'script commit' git push popd ;; "h"|"help"|*) cat <<EOF github [hcls] [path] usage: h|help : help c|clone project : git clone {$my_github}project.git l|pull project : git pull s|push project : git push EOF ;; esac } function _github() { COMPREPLY=() local cur=${COMP_WORDS[COMP_CWORD]}; local com=${COMP_WORDS[COMP_CWORD-1]}; case $com in 'github') COMPREPLY=($(compgen -W 'c clone l pull s push h help' -- $cur)) ;; 'compile') local pro=($(awk '{print $1}' project.list)) COMPREPLY=($(compgen -W '${pro[@]}' -- $cur)) ;; *) ;; esac return 0 } complete -F _github github
|
从效果上,可以说已经实现了tab键自动补全,不过不是很完美:
- 每个函数需要搭配一个额外的补全函数
- 补全函数的实现有大量的重复代码
- 另外还需要一个额外的命令进行绑定
理想的应该是:在函数的内部加上一条命令或者一个配置来解决。