bash 中等号 (=) 的自动完成问题

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_refbash 完成:

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

相关内容