Определение функции завершения ZSH (compdef) для нескольких команд

У меня есть сценарий завершения ZSH под названием

#compdef kubens
_arguments "1: :(- $(kubectl get namespaces -o=jsonpath='{range .items[*].metadata.name}{@}{"\n"}{end}'))"

Это обеспечивает завершение команды kubens. Однако, если пользователь предоставляет определенный аргумент установки, программа связана с именем kns, поэтому я пытаюсь выполнить обе эти команды, используя одно и то же #compdef.

Как мне этого добиться?


person Ahmet Alp Balkan    schedule 17.05.2017    source источник


Ответы (1)


Мы могли бы использовать форму cmd=service для строки #compdef:

#compdef kubens kns=kubens

Хотя мы можем использовать несколько имен для строки #compdef, формы cmd=service могут использоваться, когда cmd ведет себя так же, как service:

#compdef name ... [ -{p|P} pattern ... [ -N name ... ] ]

Файл станет автоматически загружаемым, и функция, определенная в нем, будет вызываться при заполнении names, каждое из которых является либо именем команды, аргументы которой должны быть завершены ...
.. .
Каждое имя также может иметь форму "cmd=service". При выполнении команды cmd функция обычно ведет себя так, как если бы вместо этого выполнялась команда (или специальный контекст) service.

- _10 _

person hchbaw    schedule 18.05.2017
comment
Спасибо, похоже, что эта информация была похоронена в руководстве, и результаты поиска Google ее не обнаружили. Надеюсь, этот вопрос поможет другим. - person Ahmet Alp Balkan; 18.05.2017