首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将函数完成委托给带有附加参数的命令

将函数完成委托给带有附加参数的命令
EN

Stack Overflow用户
提问于 2020-04-21 04:06:50
回答 1查看 183关注 0票数 0

我试图为我自己的函数kctxt()启用Bash完成,该函数将委托给kubectl,如下所示:

代码语言:javascript
复制
kctxt() {
  if [[ -z ${1+x} ]]; then
    # show context if no arguments
    kubectl config current-context
  else
    # set new context via completion
    kubectl config use-context "$@"
  fi
}

# For example, get completions just like:
# kubectl config use-context <tab><tab>

$ kctxt <tab><tab>
minikube eks-kube
$ kctxt ▊

首先,我想补充一点,kubectl的标准完成对我来说在macOS上运行得很好,我甚至安装了complete-alias来匹配alias k=kubectl

是否有泛型将自定义函数的完成委托给另一个也包含附加参数的命令?对于类似的问题,我咨询了许多答案,这些问题将子命令委托给另一个命令,比如exectime,但我所能得到的只有完成主命令。

我还试图定义这样的自定义完成函数,并将其委托给__start_kubectl() (每个complete -p kubectl),但没有成功。

代码语言:javascript
复制
_complete_kctxt() {
  COMPREPLY=()

  COMP_WORDS=(config use-context $2)
  COMP_LINE="kubectl ${COMP_WORDS[@]}"

  local prev=${COMP_WORDS[$COMP_CWORD]}
  local cur=${COMP_WORDS[$((++COMP_CWORD))]}

  COMP_POINT=${#COMP_LINE}
  [[ -z "$cur" ]] && ((++COMP_POINT))

  __start_kubectl kubectl $cur $prev
}
complete -F _complete_kctxt kctxt

我甚至试图通过BASH_COMP_DEBUG_FILE跟踪kubectl的完成情况,但这是很难理解的。

EN

回答 1

Stack Overflow用户

发布于 2020-06-19 20:22:08

你试过这样定义你的命令吗?

代码语言:javascript
复制
alias kctxt="kubectl config current-context"

它适用于安装了bash-completion的其他别名。.bash_aliases中的别名和.bash_completion中的该行

代码语言:javascript
复制
complete -F _complete_alias kctxt
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61335790

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档