获取 auto_complete 的值列表
Fetch list of values for auto_complete
我有以下工作bash_completion代码
_supdeploy()
{
local cur prev opts cword
_init_completion || return
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
first="${COMP_WORDS[1]}"
opts="option1 option2 --help"
case "${first}" in
option1)
if [[ "$cur" == * ]]; then
COMPREPLY=( $( compgen -W '--arg1 --arg2 --arg3 --help' -- "$cur" ) )
fi
return 0
;;
option2)
if [[ "$cur" == * ]]; then
COMPREPLY=( $( compgen -W '--arg1 --arg2 --arg3 --help' -- "$cur" ) )
fi
return 0
;;
*)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
;;
esac
} &&
complete -F _supdeploy supdeploy
当我按 tab 键时,我首先得到 opts
的列表,如果我使用其中一个选项,再次按 tab 键,我得到这些选项的 arg 列表。
我正在尝试做的是预先填充其中一些参数,这些参数已分配给它们一个列表以供选择。
我查看的示例都在顶层使用这些示例,例如我的案例中的 opts,但我想在第二层使用它。
我已经尝试在 case 循环中实现第二个 if
,并检查 $cur
是否是 arg 之一。
但它从来没有用过,仍然只是在选项卡上打印完整列表。
如果你想列出 --arg1
在 option1
情况下的可能选项,你可以检查前一个单词 (prev="{COMP_WORDS[COMP_CWORD-1]}"
) 是否等于 --arg1
:
case "$first" in
option1)
case "$prev" in
--arg1)
COMPREPLY=( $( compgen -W 'A Ba Bb C' -- "$cur" ) )
return 0
;;
--arg2)
COMPREPLY=( $( compgen -W '11 12 2 3' -- "$cur" ) )
return 0
;;
*)
COMPREPLY=( $( compgen -W '--arg1 --arg2 --arg3 --help' -- "$cur" ) )
return 0
;;
esac
;;
option2)
如果检查前一个词不够灵活,你可以实现更复杂的逻辑。来自手册页:
COMP_WORDS
An array variable (see Arrays below) consisting of the individ-
ual words in the current command line. The line is split into
words as readline would split it, using COMP_WORDBREAKS as
described above. This variable is available only in shell func-
tions invoked by the programmable completion facilities (see
Programmable Completion below).
我有以下工作bash_completion代码
_supdeploy()
{
local cur prev opts cword
_init_completion || return
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
first="${COMP_WORDS[1]}"
opts="option1 option2 --help"
case "${first}" in
option1)
if [[ "$cur" == * ]]; then
COMPREPLY=( $( compgen -W '--arg1 --arg2 --arg3 --help' -- "$cur" ) )
fi
return 0
;;
option2)
if [[ "$cur" == * ]]; then
COMPREPLY=( $( compgen -W '--arg1 --arg2 --arg3 --help' -- "$cur" ) )
fi
return 0
;;
*)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
;;
esac
} &&
complete -F _supdeploy supdeploy
当我按 tab 键时,我首先得到 opts
的列表,如果我使用其中一个选项,再次按 tab 键,我得到这些选项的 arg 列表。
我正在尝试做的是预先填充其中一些参数,这些参数已分配给它们一个列表以供选择。
我查看的示例都在顶层使用这些示例,例如我的案例中的 opts,但我想在第二层使用它。
我已经尝试在 case 循环中实现第二个 if
,并检查 $cur
是否是 arg 之一。
但它从来没有用过,仍然只是在选项卡上打印完整列表。
如果你想列出 --arg1
在 option1
情况下的可能选项,你可以检查前一个单词 (prev="{COMP_WORDS[COMP_CWORD-1]}"
) 是否等于 --arg1
:
case "$first" in
option1)
case "$prev" in
--arg1)
COMPREPLY=( $( compgen -W 'A Ba Bb C' -- "$cur" ) )
return 0
;;
--arg2)
COMPREPLY=( $( compgen -W '11 12 2 3' -- "$cur" ) )
return 0
;;
*)
COMPREPLY=( $( compgen -W '--arg1 --arg2 --arg3 --help' -- "$cur" ) )
return 0
;;
esac
;;
option2)
如果检查前一个词不够灵活,你可以实现更复杂的逻辑。来自手册页:
COMP_WORDS An array variable (see Arrays below) consisting of the individ- ual words in the current command line. The line is split into words as readline would split it, using COMP_WORDBREAKS as described above. This variable is available only in shell func- tions invoked by the programmable completion facilities (see Programmable Completion below).