Bash에서 중복 완료를 피하는 방법

Bash에서 중복 완료를 피하는 방법

기본 완성 스크립트를 정의했습니다. 프로그램 d의 경우 exempt,limit,show 및 update 하위 명령을 사용할 수 있습니다.

complete -W "exempt limit show update" d

그러나 나중에 Tab을 누르면 d exemptbash는 완성 메뉴를 다시 표시합니다.

$ d <tab>
exempt  limit   show    update
$ d exempt <tab>
exempt  limit   show    update
$ d exempt exempt <tab>
exempt  limit   show    update

Bash가 동일한 단어를 반복해서 삽입하는 것을 방지하는 방법은 무엇입니까?

답변1

당신이 보고 있는 것은 기본 완성 메커니즘을 사용할 때 예상되는 동작입니다 complete -W.

더 스마트한 완성을 원한다면 완성 함수를 작성해야 합니다("프로그래밍 가능한 완성" 섹션 참조).배쉬 매뉴얼) 및 를 사용합니다 complete -F.

예시를 조정하는 방법은 다음과 같습니다.

$ comp_d() {
    COMPREPLY=( $(
        if [ "$COMP_CWORD" -eq 1 ]; then
            compgen -W "exempt limit show update" "$2"
        fi
    ) )
}

$ complete -F comp_d d

이러한 함수는 완성 후보를 배열로 반환해야 합니다 COMPREPLY. 사용자가 첫 번째 매개변수(1)를 완성한 COMP_CWORD경우에만 단어 목록을 사용하고 , 그렇지 않으면 배열이 비어 있습니다.

관련 정보