コマンドのオートコンプリート機能を作成しましたが、オプションフラグの後のパラメーターについてはオートコンプリートにはなりません。
function _qpdm_complete()
{
local cur prev options my_list
COMPREPLY=()
cur="${COMP_WORD[COMP_CWORD]}"
prev="${COMP_WORD[COMP_CWORD-1]}"
options="-opt"
my_list="quantum alpha betta omega operation"
if [[ ${cur} == -* || ${COMP_CWORD} -eq 1 ]] ; then
COMPREPLY=( $(compgen -W "${options}" ${cur}) )
return 0
else
COMPREPLY=( $( compgen -W "${my_list}" -- ${cur}) )
fi
}
complete -F _qpdm_complete qpdm
ではターミナルで
qpdm <タブ>
qpdm -opt
qpdm -opt<タブ>
qpdm -opt
quantum alpha betta omega operation
qpdm -opt o<タブ>
予想する
qpdm -opt o
omega operation
しかし得る
qpdm -opt o
quantum alpha betta omega operation
私の_qpdm_complete()で何が欠けていますか?
答え1
おそらくオタイルでしょう。COMP_WORD
Bashで使用されている変数ではありません(または少なくともマニュアルには見つかりませんでした)。あなたは書かなければなりませんCOMP_WORDS
代わりに。
コード内とはcur
未定義の変数を参照するprev
ため、常に空です。そして正確には、nullに一致するすべてのオプション値が常に返されます。${COMP_WORD[COMP_CWORD]}
${COMP_WORD[COMP_CWORD-1]}
compgen
cur