디렉터리 및 고정 세트를 사용한 사용자 정의 bash 완성

디렉터리 및 고정 세트를 사용한 사용자 정의 bash 완성

Bash 완료를 설정하려고 하는데 두 가지 문제가 있습니다.

  1. 매개변수 1의 경우 디렉터리를 완성해야 합니다.
  2. 완성을 위한 고정 배열인 매개변수 2의 경우 bash에서 선택을 수행하는 방법을 몰랐습니다. 이전에는 복잡한 스크립트를 위해 항상 Perl 스크립트를 사용했습니다.
_some_func()
{
    case $COMP_CWORD in
    1)
        # default completion ? how
        ;;
    2)
        COMPREPLY=( "go" "unbind" )
        # I should be using a program to echo "go" and "unbind",
        # and let bash decide which one to complete , right ? 
        # that's the only two possible parameters here
        ;;
    esac
}

complete -F _some_func some_func

답변1

한 가지 접근 방식은 다음과 같습니다. dirnames기본 완성으로 설정하고 두 번째 인수에 대한 사용자 정의 완성을 생성합니다.

_some_func () {
  case $COMP_CWORD in
    1) :;; # let the default take over
    2) COMPREPLY=($(compgen -W "go unbind" "${COMP_WORDS[$COMP_CWORD]}"));;
    *) COMPREPLY=("");;
  esac
}
complete -F _some_func -d some_func

compgen -dwhen is 1을 호출할 수도 있지만 $COMP_CWORD출력에서 ​​공백을 이스케이프 처리해야 compgen하고 두 결과를 구분하는 개행 문자와 완성에 포함된 개행 문자를 구분할 수 없기 때문에 bash에서는 잘 작동하지 않습니다(드문 경우). , 그러나 가능).

관련 정보