Я пытаюсь создать подпрограмму завершения bash, которая будет предлагать флаги командной строки и подходящие значения флагов.Например, в приведенной ниже команде fstcompose я бы хотел, чтобы подпрограмма соревнования сначала предложила флаг compose_filter = , а затем предложила возможные значения из [alt_sequence, auto, match, sequence].
fstcompose --compose_filter=
Для любых флагов, у которых нет набора связанных значений, я хочу, чтобы соревнование вернулось к стандартному режиму предложения путей или файлов.
Единственная проблема, с которой я столкнулсяface - это знак равенства =, рассматриваемый как отдельный токен и устанавливаемый как 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