첫 번째 매개변수에 대해 자동 완성을 구성하고 다른 매개변수는 유지합니다.

첫 번째 매개변수에 대해 자동 완성을 구성하고 다른 매개변수는 유지합니다.

다양한 매개변수가 필요한 유틸리티가 있습니다. 이제 첫 번째 매개변수를 자동 완성하고 다른 모든 매개변수는 계속해서 정상적으로 자동 완성되도록 하고 싶습니다. 어떻게 해야 하나요?

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

관련 정보