私はcompgen
when $COMP_WORD
= 1を使用していましたが、それ以外の場合はデフォルトの完成を復元したいと思います。
今私には、
_rr()
{
case $COMP_CWORD in
1)
COMPREPLY=($(compgen -W "A B" "${COMP_WORDS[$COMP_CWORD]}"))
;;
esac
}
complete -F _rr rr
これ$COMP_CWORD
で1以外の場合、必要なデフォルトの補完であるファイル/ディレクトリの補完は得られません。
また、この最小限の場合にのみ${COMP_WORDS[$COMP_CWORD - 1]}
完了を有効にするだけです。A
答え1
実際の状況では、他の操作も実行したいと仮定しているので、コンストラクタを引き続きcase
使用してください(この最小限の場合はif
コンストラクタで十分ですが)。
_rr()
{
cur="${COMP_WORDS[COMP_CWORD]}"
prev="${COMP_WORDS[COMP_CWORD - 1]}"
case "${COMP_CWORD}" in
1)
COMPREPLY=($(compgen -W "A B" "${cur}"))
;;
esac
case "${prev}" in
A)
COMPREPLY=($(compgen -f "${cur}"))
;;
esac
}
complete -F _rr rr
-f
このオプションのドキュメントは、compgen
以下で確認できます。バッシュリファレンスマニュアル(組み込みの説明については、サブセクションの下にスクロールしてくださいfile
)。-A action
complete