Запрашивать bash для получения ответа на завершение команды?

Я пишу утилиту CLI под названием envset , которая имеет это использование: envset [ENVSET-OPTIONS] [SETNAME] [--] [CMD] [ARGS]...
Он в основном запускает команду с набором переменных среды, определенных в файле конфигурации (уже есть пакет npm с тем же именем, но я реализую свою утилиту в Perl с другим набором функций).

Я хочу предоставить завершение вкладки для envset . Завершение выполняется с помощью функции оболочки _envset . Было бы неплохо в случае, как показано ниже ( ^ обозначает местоположение курсора при нажатии Tab ):

 % envset mycolors -- ls -^ 

_envset может вернуть ответы на завершение для ls вместо этого (так, верните список возможных параметров командной строки ls). Есть ли простой способ, я могу попросить Баш вернуть их мне?

В противном случае мне пришлось бы сделать что-то вроде следующего в _envset (что не идеально, но должно быть достаточно для большинства случаев):

  1. проанализируйте вывод complete чтобы найти запись, которая описывает, как команда (в приведенном выше примере, ls ) завершена. Если их нет, найдите запись с -D (обработчик по умолчанию).

  2. если команда завершена функцией (-F), вызовите эту функцию (после установки COMP_WORDS и COMP_CWORD соответственно). Верните COMPREPLY из функции.

  3. если команда завершена внешней командой (-C), запустите команду (после правильной установки COMP_LINE и COMP_POINT). Захватите выходные линии и установите COMPREPLY.

  4. и т. д. для каждого из других типов обработчиков (-W, -G и т. д.). Я думаю, что обработка -F, -C, -W и -A должна охватывать большинство случаев.

  5. для обработчика по умолчанию есть специальный случай, когда он возвращает 124, что означает, что мы должны перезапустить с шага 1, чтобы увидеть, был ли обработчик определен complete для нашей требуемой команды.