这个bash完成功能如何工作? (对于cloudfoundry cli)

时间:2017-04-06 12:33:40

标签: bash completion compgen

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

1 个答案:

答案 0 :(得分:1)

这有点推测,因为我实际上并未安装此软件。

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

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