Я пытаюсь построить генератор для завершения bash, но мне нужно иметь возможность вызывать «вложенные» команды. Вот что у меня так далеко.
#!bash
_test()
{
local cur prev
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
case ${COMP_CWORD} in
1)
COMPREPLY=($(compgen -W "plain" -- ${cur}))
;;
2)
case ${prev} in
plain)
_plain
;;
show)
COMPREPLY=($(compgen -W "some other args" -- ${cur}))
;;
esac
;;
*)
COMPREPLY=()
;;
esac
}
_plain() {
local cur prev
cur=${COMP_WORDS[COMP_CWORD]}
prev=${COMP_WORDS[COMP_CWORD-1]}
echo ${COMP_CWORD}
echo $cur
echo $prev
case ${COMP_CWORD} in
2)
COMPREPLY=($(compgen -W "one two three" -- ${cur}))
;;
3)
case ${prev} in
one)
__one
;;
esac
;;
*)
COMPREPLY=()
;;
esac
}
__one() {
echo "another"
}
complete -F _test test
включая выходные данные отладки. По некоторым причинам COMP_CWORD
, cur
и prev
не обновляются при вызове функции __one
. Каким образом я могу выполнить скрипт завершения вложенного bash, как этот?