恢复默认完成

恢复默认完成

我使用compgenwhen $COMP_WORDequals 1,现在我想恢复默认完成,否则,

现在我有,

_rr()
{
    case $COMP_CWORD in
        1)
            COMPREPLY=($(compgen -W "A B" "${COMP_WORDS[$COMP_CWORD]}"))
            ;;
    esac
}

complete -F _rr rr

现在,当$COMP_CWORD不是 1 时,我没有得到文件/目录的补全,这是我需要的默认补全。

另外,我只需要在这种最小情况${COMP_WORDS[$COMP_CWORD - 1]}下启用完成。A

答案1

我假设在您的现实情况下,您也想做其他事情,因此继续使用case构造(尽管在这种最小情况下,if构造就足够了):

_rr()
{
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD - 1]}"

    case "${COMP_CWORD}" in
        1)
            COMPREPLY=($(compgen -W "A B" "${cur}"))
            ;;
    esac

    case "${prev}" in
        A)
            COMPREPLY=($(compgen -f "${cur}"))
            ;;
    esac
}

complete -F _rr rr

-f该选项的文档compgen可在Bash 参考手册(向下滚动到内置描述的小节file下)。-A actioncomplete

相关内容