コマンドラインフラグと適切なフラグ値を提案するbash完了ルーチンを構築しようとしています。たとえば、以下のfstcomposeコマンドでは、競合ルーチンが最初にcompose_filter =フラグを提案し、次に[alt_sequence、auto、match、sequence]から可能な値を提案するようにします。
fstcompose --compose_filter=
値のセットが関連付けられていないフラグの場合、競合他社がパスまたはファイルを提案するデフォルトモードにフォールバックするようにします。
私が直面している問題の1つは、=等号が個別のトークンとして扱われ、前の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