bash 根据第一个值使用不同的选项完成
bash completion with different options based on first value
我目前正在尝试为我们的一种工具编写 bash_completion 脚本。
正在查看 apt-get 和 chkconfig 脚本以寻求帮助。
基本上我想要做的是根据第一个值获得不同的选项选择。
一个值可以有多个选项。
command <value1> <--option1> <--option2> ...
command <value2> <--option3> <--option4> ...
查看 apt-get 脚本,它将 return 任何第一个值的相同选项列表。
所以这不是我需要的。
这是我目前得到的:
_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
之前,同样的结果
而不是prev
,您只想每次查看第一个参数的值:
case ${COMP_WORDS[1]} of
如果允许 "general" 选项在子命令之前,它会变得有点诡计,但通常您希望查看第一个非选项参数,而不一定是前一个参数。
我目前正在尝试为我们的一种工具编写 bash_completion 脚本。 正在查看 apt-get 和 chkconfig 脚本以寻求帮助。 基本上我想要做的是根据第一个值获得不同的选项选择。 一个值可以有多个选项。
command <value1> <--option1> <--option2> ...
command <value2> <--option3> <--option4> ...
查看 apt-get 脚本,它将 return 任何第一个值的相同选项列表。 所以这不是我需要的。
这是我目前得到的:
_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
之前,同样的结果
而不是prev
,您只想每次查看第一个参数的值:
case ${COMP_WORDS[1]} of
如果允许 "general" 选项在子命令之前,它会变得有点诡计,但通常您希望查看第一个非选项参数,而不一定是前一个参数。