为第一个参数配置自动完成,保留其他参数

为第一个参数配置自动完成,保留其他参数

我有一个实用程序,它需要大量不同的参数。现在,我想自动完成第一个参数,但让所有其他参数继续正常自动完成。我怎么做?

function _my_autocomplete_()
{
    case $COMP_CWORD in
        1) COMPREPLY=($(compgen -W "$(get_args_somehow)" -- ${COMP_WORDS[COMP_CWORD]}));;
        *) # What goes here?
    esac
}

complete -F _my_autocomplete_ mycommand

答案1

显然我完全错过了你的问题。答案是没有明确定义的“正常自动完成”。但是,如果您知道希望它完成什么类型​​的事情(文件、别名、pid、变量名等),您可以向compgen.看这个 compgen 手册页,特别是-A下面的选项complete(它们是相同的)。例如,如果您想完成文件名,您可以使用以下命令:

compgen -f -- "${COMP_WORDS[COMP_CWORD]}"

如果你想完成命令(包括别名、函数等),你可以使用这个:

compgen -back -A function -- "${COMP_WORDS[COMP_CWORD]}"

使用$COMP_CWORD获取正在完成的单词的索引。如果索引不为 1,则设置$COMPREPLY()并返回。

COMP_CWORD

    An index into ${COMP_WORDS} of the word containing the current 
    cursor position. This variable is available only in shell functions
    invoked by the programmable completion facilities

答案2

另一个答案是不正确的。compgen -f接近默认行为,但并不完全相同(尝试自动完成目录名称以查看差异)。

答案# What goes here?很简单:compopt -o default

相关内容