一个脚本中的多个自动完成功能

Multiple auto-completion functions in one script

我有一个命令 pyseqtools.py,我想为位置参数和标志启用自动完成 (-a/--analysis)。我可以在单独的自动完成脚本中使用这些代码行分别自动完成其中任何一个:

stat_list="mageck bagel2"

function analysis()
{
case  in
    -a) COMPREPLY=($(compgen -W "$stat_list" "${COMP_WORDS[$COMP_CWORD]}"));;
    --analysis) COMPREPLY=($(compgen -W "$stat_list" "${COMP_WORDS[$COMP_CWORD]}"));;
esac
}

complete -F analysis pyseqtools.py

module()
{
    local opts
    opts="crispr rna-seq chip-seq cutrun"
    case $COMP_CWORD in
        1)
            COMPREPLY=( $(compgen -W "${opts}" -- "${COMP_WORDS[COMP_CWORD]}") )
            ;;

    esac
    return 0
}

complete -F module pyseqtools.py 

当我将所有代码放在一个自动完成脚本中时,只有文件底部的代码块在工作。我怎样才能让它们在一个脚本中工作?

我通过将两个功能合二为一来实现它:

stat_list="mageck bagel2"

function _complete()
{
case  in
    -a) COMPREPLY=($(compgen -W "$stat_list" "${COMP_WORDS[$COMP_CWORD]}"));;
    --analysis) COMPREPLY=($(compgen -W "$stat_list" "${COMP_WORDS[$COMP_CWORD]}"));;
esac

    local opts
    opts="crispr rna-seq chip-seq cutrun"
    case $COMP_CWORD in
        1)
            COMPREPLY=( $(compgen -W "${opts}" -- "${COMP_WORDS[COMP_CWORD]}") )
            ;;

    esac
    return 0

}

complete -F _complete pyseqtools.py