2

我试着理解这个 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") )

4

1 回答 1

2

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

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

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

于 2017-04-06T12:53:11.480 回答