这个 bash 完成函数是如何工作的? (对于 cloudfoundry cli)

How does this bash completion function work? (for cloudfoundry cli)

我试着理解这个 bash 完成函数? (对于 cloudfoundry cli)

我读了https://debian-administration.org/article/317/An_introduction_to_bash_completion_part_2 以及 https://www.gnu.org/software/bash/manual/bash.html#Programmable-Completion 的 bash 参考指南 但可以弄清楚 cloudfoundry 脚本中的代码是如何工作的: (从/usr/local/etc/bash_completion.d/cf复制)

      _cf() {
          # All arguments except the first one
          args=("${COMP_WORDS[@]:1:$COMP_CWORD}")
          # Only split on newlines
          local IFS=$'
'
          # Call completion (note that the first element of COMP_WORDS is
          # the executable itself)
          COMPREPLY=($(GO_FLAGS_COMPLETION=1 ${COMP_WORDS[0]} "${args[@]}"))
          return 0
      }
      complete -F _cf cf

我已经为 cf 安装了一些插件,希望看到它们完成。 (例如 github.com cf-targets-plugin

对我有什么提示吗?单词列表是如何生成的? (我假设它在 COMP_WORDS[]

这与

等样本大不相同

COMPREPLY=( $(compgen -W "$worldist -- "$cur_opt") )

这有点推测,因为我还没有实际安装这个软件。

显然,当在环境变量 GO_FLAGS_COMPLETION 设置为 1 的情况下调用程序时,程序本身将生成可用完成列表。因此,代码只是设置该变量并使用当前参数调用程序,并且期望收到一份完成列表。

这是基于上下文的完成的一个相当优雅的解决方案 -- 程序本身知道它可以接受当前参数的参数,并且 Bash 不必复制该信息或解析相同的信息参数。