![bash 자동 완성 개인 명령: 옵션 뒤에 매개변수를 자동 완성할 수 없습니다.](https://linux55.com/image/181317/bash%20%EC%9E%90%EB%8F%99%20%EC%99%84%EC%84%B1%20%EA%B0%9C%EC%9D%B8%20%EB%AA%85%EB%A0%B9%3A%20%EC%98%B5%EC%85%98%20%EB%92%A4%EC%97%90%20%EB%A7%A4%EA%B0%9C%EB%B3%80%EC%88%98%EB%A5%BC%20%EC%9E%90%EB%8F%99%20%EC%99%84%EC%84%B1%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
명령에 대한 자동 완성 기능을 작성했지만 옵션 플래그 뒤의 매개변수에 대해서는 자동 완성이 되지 않습니다.
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