shell 命令自动补全
代码如下:
# github相关操作
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 键自动补全,不过不是很完美:
- 每个函数需要搭配一个额外的补全函数
- 补全函数的实现有大量的重复代码
- 另外还需要一个额外的命令进行绑定
理想的应该是:在函数的内部加上一条命令或者一个配置来解决。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论