我目前正在尝试为我们的某个工具编写bash_completion脚本。 正在查看apt-get和chkconfig脚本以获得一些帮助。 基本上我想要做的是根据第一个值选择不同的选项。 值可以有多个选项。
command <value1> <--option1> <--option2> ...
command <value2> <--option3> <--option4> ...
查看apt-get脚本,它将返回任何第一个值的相同选项列表。 所以这不是我需要的。
这是我到目前为止所得到的:
_supdeploy()
{
local cur prev opts cword
_init_completion || return
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="deploy destroy supported list fulllist status fullstatus getip shutdown powerOff powerOn"
case "${prev}" in
deploy)
if [[ "$cur" == -* ]]; then
if [[ $cword -eq 2 || $cword -eq 3 || $cword -eq 4 ]]; then
COMPREPLY=( $( compgen -W '--hostname --os --version' -- "$cur" ) )
fi
fi
return 0
;;
destroy)
if [[ "$cur" == -* ]]; then
COMPREPLY=( $( compgen -W '--name --silent' -- "$cur" ) )
fi
return 0
;;
*)
COMPREPLY=( $(compgen -W "${opts}" -- ${cur}) )
return 0
;;
esac
} &&
complete -F _supdeploy supdeploy
我为deploy和destroy提供了不同的选项选择。
但我只能使用一个--
选项。
当我再次尝试使用--
时,没有任何反应,如果没有--
,我会从opts中获取列表。
这可能很容易,但我现在无法在这里找到错误。
我也试过没有$cword
之前,同样的结果
答案 0 :(得分:1)
而不是prev
,你只想每次都看一下第一个参数的值:
case ${COMP_WORDS[1]} of
如果你允许“常规”选项在子命令之前,它会有点小问题,但一般来说你要查看第一个非选项参数,不一定是前一个参数。