Например, у меня есть исполняемый файл тестового app
#!/bin/bash
case $1 in
(foo)
echo "selected foo"
;;
(bar)
echo "selected bar"
;;
esac
И простое завершение для него включено в fpath
#compdef app
local -a subcmds
subcmds=('foo:show foo' 'bar:show bar')
_describe 'app' subcmds
Работает нормально. Теперь я хочу сделать оболочку, которая добавляет подкоманду в приложение
__app_wrapper () {
if [[ "$1" == baz ]]; then
echo "selected baz"
else
command app "$@"
fi
}
alias app=__app_wrapper
Как только я получаю source
, подкоманда работает нормально, но автозаполнение переключается на завершение с файлами в текущем каталоге вместо того, что предоставляет мой скрипт завершения. Почему это и как это исправить? Это потому, что приложение теперь является функцией вместо исполняемого?
На самом деле я пытаюсь использовать более сложный скрипт завершения для docker-machine
но мне удалось свести мою проблему к этому примеру.