중간 기호(=)의 bash 자동 완성 문제

중간 기호(=)의 bash 자동 완성 문제

만들려고 노력 중이야배쉬 자동완성내가 겪고 있는 문제를 보여주기 위해 이 코드를 작성하고 작업했습니다.

$ cat completion.sh
function _completion_command() {
    compopt +o bashdefault +o default +o dirnames +o filenames +o nospace +o plusdirs
    local cur=${COMP_WORDS[COMP_CWORD]}
    local prev=${COMP_WORDS[COMP_CWORD-1]}
    case "$prev" in
        -u)
            compopt -o nospace
            COMPREPLY=($(compgen -S\= -W "parm" -- $cur))
            return 0
            ;;
         parm)
            COMPREPLY=($(compgen  -W "a b c" -- $cur))
            return 0
            ;;
    esac
    COMPREPLY=($(compgen  -W "-u" -- $cur))
    return 0
}
complete -F _completion_command command

"parm"이라는 매개변수에 대해 가능한 매개변수를 제공하기 위해 완료가 필요했습니다.

. completion.sh
./command -u parm=

Tab Tab

a b c

하지만 제 경우에는 자동완성 기능이 아무런 도움이 되지 않았습니다.

답변1

prev포함 parm
cur포함 =
compgen -W "a b c" -- =아무것도 출력하지 않음

당신은 그것을 사용할 수 있습니다_get_comp_words_by_ref~에서배쉬 완료:

source bash-completion # /usr/share/bash-completion/bash_completion on Ubuntu with bash-complete installed

function _completion_command() {
  local cur prev
  _get_comp_words_by_ref -n = cur prev
  case "$prev" in
    -u)
      case "$cur" in
        parm=*)
          COMPREPLY=($(compgen -W "a b c" -- ${cur#*=}))
          return 0;
          ;;
        *)
          compopt -o nospace
          COMPREPLY=($(compgen -S\= -W "parm" -- $cur))
          return 0;
          ;;
      esac
      ;;
  esac

  COMPREPLY=($(compgen  -W "-u" -- $cur))
}

complete -F _completion_command command

관련 정보