这个 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 不必复制该信息或解析相同的信息参数。
我试着理解这个 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 不必复制该信息或解析相同的信息参数。