我正在嘗試爲我們的其中一個工具編寫bash_completion腳本。 看着apt-get和chkconfig腳本尋求幫助。 基本上我想要做的是根據第一個值獲取不同的選項選擇。 值可以有多個選項。基於第一個值的不同選項bash完成
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
我得到一個不同的選擇的兩個部署和銷燬選擇。 但我只能使用一個--
選項。 當我再次嘗試使用--
時,沒有任何反應,沒有--
,我從opts獲得列表。
這可能是一件容易的事,但目前我在這裏找不到錯誤。 我也有之前試過沒有$cword
,相同的結果
你可以看看'git'如何完成不同的子命令 –