shell 命令自动补全

发布于 2023-06-07 22:17:57 字数 1410 浏览 42 评论 0

代码如下:

# 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

风情万种。

暂无简介

文章
评论
28 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文