다양한 매개변수가 필요한 유틸리티가 있습니다. 이제 첫 번째 매개변수를 자동 완성하고 다른 모든 매개변수는 계속해서 정상적으로 자동 완성되도록 하고 싶습니다. 어떻게 해야 하나요?
function _my_autocomplete_()
{
case $COMP_CWORD in
1) COMPREPLY=($(compgen -W "$(get_args_somehow)" -- ${COMP_WORDS[COMP_CWORD]}));;
*) # What goes here?
esac
}
complete -F _my_autocomplete_ mycommand
답변1
분명히 나는 당신의 질문을 완전히 놓쳤습니다. 대답은 명확하게 정의된 "일반적인 자동 완성"이 없다는 것입니다. 그러나 수행하려는 작업 유형(파일, 별칭, pid, 변수 이름 등)을 알고 있다면 compgen
.Compgen 매뉴얼 페이지, 특히 -A
아래 옵션 complete
(동일함)입니다. 예를 들어 파일 이름을 완성하려면 다음 명령을 사용할 수 있습니다.
compgen -f -- "${COMP_WORDS[COMP_CWORD]}"
명령 완성(별칭, 함수 등 포함)을 원할 경우 다음을 사용할 수 있습니다.
compgen -back -A function -- "${COMP_WORDS[COMP_CWORD]}"
사용$COMP_CWORD
완성되는 단어의 색인을 가져옵니다. index가 1이 아닌 경우 로 설정되어 $COMPREPLY
반환 ()
됩니다.
COMP_CWORD
An index into ${COMP_WORDS} of the word containing the current
cursor position. This variable is available only in shell functions
invoked by the programmable completion facilities
답변2
다른 대답은 올바르지 않습니다. compgen -f
기본 동작에 가깝지만 완전히 동일하지는 않습니다(차이를 확인하려면 디렉터리 이름 자동 완성을 시도하세요).
대답은 # What goes here?
간단합니다.compopt -o default