首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何自动完成嵌套的、多层次的子命令?

如何自动完成嵌套的、多层次的子命令?
EN

Stack Overflow用户
提问于 2013-07-26 10:43:55
回答 1查看 6.4K关注 0票数 19

我正在尝试为我自己的一组命令开发一个自动完成或选项卡完整功能。

例如,假设foo是我的二进制文件:

代码语言:javascript
复制
CLI>> foo [TAB] [TAB]

它应该显示主要命令configureshow

如果我选择configure,它应该显示出子命令CMDSPNPU

代码语言:javascript
复制
CLI>> foo configure [TAB] [TAB]
DSP NPU CM`
代码语言:javascript
复制
                                                                                             I only know how to tab-complete and display for the first level - how can I get the second level as well?

我会把这个放在/etc/completion.d里。

我的守则:

代码语言:javascript
复制
_foo()
{
    local cur prev opts
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"
    words=("${COMP_WORDS[@]}")
    cword=$COMP_CWORD
    opts="configure show"
}

我被困在如何在CM DSP NPU下添加子命令的问题上。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-26 12:59:15

下面是一个用于两级案例的示例脚本(其中有一节介绍了show的子命令,以说明它是如何完成的--如果这三行与您的情况无关,您可以删除它们):

代码语言:javascript
复制
_foo()
{
    local cur prev

    cur=${COMP_WORDS[COMP_CWORD]}
    prev=${COMP_WORDS[COMP_CWORD-1]}

    case ${COMP_CWORD} in
        1)
            COMPREPLY=($(compgen -W "configure show" -- ${cur}))
            ;;
        2)
            case ${prev} in
                configure)
                    COMPREPLY=($(compgen -W "CM DSP NPU" -- ${cur}))
                    ;;
                show)
                    COMPREPLY=($(compgen -W "some other args" -- ${cur}))
                    ;;
            esac
            ;;
        *)
            COMPREPLY=()
            ;;
    esac
}

complete -F _foo foo

希望从这个例子中可以看出,如何将它扩展到三个级别的命令等等。

票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17879322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档