我正在尝试构建一个 bash 完成例程,它将建议命令行标志和合适的标志值。例如,在下面的fstcompose命令中,我希望比赛例程首先建议compose_filter=标志,然后建议来自 [alt_sequence, auto, match, sequence] 的可能值。
fstcompose --compose_filter=
对于没有一组关联值的任何标志,我希望竞争回退到建议路径或文件的默认模式。
我面临的一个问题是将 = 等号视为单独的标记,并设置为 prev COMP_WORD。是否有一种技术可以在前一个 = 字符之前(包括前一个 = 字符)检测整个标志?或者有没有更好的方法来实现这种带有可枚举值的标志完成?下面是我正在使用的完成例程的示例。
_fstcompose()
{
local cur prev opts filters pprev
COMPREPLY=()
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD-1]}"
opts="--compose_filter= --connect"
filters="alt_sequence auto match sequence"
if [[ ${cur} == -* ]] ; then
COMPREPLY=($(compgen -W "${opts}" -- ${cur}))
return 0
fi
if [[ ${prev} == "--compose_filter=" ]] ; then
COMPREPLY=($(compgen -W "${filters}" -- ${cur}))
return 0
fi
_filedir
}
complete -o nospace -F _fstcompose fstcompose