中間記号(=)の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

prevparm
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

おすすめ記事