我试着理解这个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") )
答案 0 :(得分:1)
这有点推测,因为我实际上并未安装此软件。
显然,当环境变量GO_FLAGS_COMPLETION
设置为1时,程序本身将生成一个可用的完成列表。因此,代码只是设置该变量并使用当前参数调用该程序,并期望收到完成列表。
对于基于上下文的完成,这是一个相当优雅的解决方案 - 程序本身知道它可以接受当前参数的参数,而Bash不必复制该信息或解析相同的参数。