명령에 대한 자동 완성 기능을 작성했지만 옵션 플래그 뒤의 매개변수에 대해서는 자동 완성이 되지 않습니다.
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_WORD
Bash에서 사용하는 변수가 아닙니다(또는 적어도 매뉴얼에서 찾을 수 없었습니다). 너는 써야 해COMP_WORDS
대신에.
코드에서 cur
및 는 정의되지 않은 변수를 참조하기 prev
때문에 항상 비어 있습니다 . 그리고 정확하게는 null과 일치하는 모든 옵션 값이 항상 반환됩니다 .${COMP_WORD[COMP_CWORD]}
${COMP_WORD[COMP_CWORD-1]}
compgen
cur