bash 자동 완성 개인 명령: 옵션 뒤에 매개변수를 자동 완성할 수 없습니다.

bash 자동 완성 개인 명령: 옵션 뒤에 매개변수를 자동 완성할 수 없습니다.

명령에 대한 자동 완성 기능을 작성했지만 옵션 플래그 뒤의 매개변수에 대해서는 자동 완성이 되지 않습니다.

function _qpdm_complete() 
{
    local cur prev options my_list
    COMPREPLY=()

    cur="${COMP_WORD[COMP_CWORD]}"
    prev="${COMP_WORD[COMP_CWORD-1]}"
    options="-opt" 
    my_list="quantum alpha betta omega operation"   

    if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
        COMPREPLY=( $(compgen -W "${options}" ${cur}) )
        return 0
    else 
        COMPREPLY=( $( compgen -W "${my_list}" -- ${cur}) )
    fi
}

complete -F _qpdm_complete qpdm

그럼 터미널에서

qpdm <탭>

qpdm -opt 

qpdm -opt<탭>

qpdm -opt  
quantum alpha betta omega operation

qpdm -opt o<탭>

예상하다

qpdm -opt o
omega operation

하지만 얻을

qpdm -opt o  
quantum alpha betta omega operation 

내 _qpdm_complete()에서 무엇을 놓치고 있나요?

답변1

아마도 오타일 것입니다. COMP_WORDBash에서 사용하는 변수가 아닙니다(또는 적어도 매뉴얼에서 찾을 수 없었습니다). 너는 써야 해COMP_WORDS대신에.

코드에서 cur및 는 정의되지 않은 변수를 참조하기 prev때문에 항상 비어 있습니다 . 그리고 정확하게는 null과 일치하는 모든 옵션 값이 항상 반환됩니다 .${COMP_WORD[COMP_CWORD]}${COMP_WORD[COMP_CWORD-1]}compgencur

관련 정보