1

Я пытаюсь написать функции завершения для некоторых пользовательских функций, которые я написал, но, похоже, действительно борется даже с самыми простыми.

Пример функции:

function eb_instances() {
    if [ "$#" -ne 2 ]; then
        echo "Usage eb_instances <aws profile name> <environment name>"
        echo "e.g.:"
        echo " eb_instances production kraken-prod-api"
        return 1
    fi

    aws ec2 describe-instances --filters  "Name=instance-state-name,Values=running"   "Name=tag:Name,Values=$2" --profile=$1 --output=json | jq -r ".Reservations[].Instances[].PrivateIpAddress"
}

Это имеет два позиционных аргумента, <aws profile name> и <environment name>

Я хочу, чтобы параметры завершения для <aws profile name> были динамически доступны с помощью команды sed -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' ' , и дополнения для <environment name> которые будут динамически доступны, запустив другую функцию, которую я назвал eb_names .

Я нахожу документацию довольно редкой и трудной для следования. Я также видел репозиторий zsh-дополнений для похожих команд, но не могу найти что-то похожее на то, что мне нужно.

Любая помощь с самого начала будет высоко ценится!

1 ответ1

0

Я считаю, что завершение zsh - одна из самых сложных тем в информатике, чтобы обернуть мой мозг. Много неудачных попыток за много лет до того, как я начал его получать. Помощь, доступная онлайн, не велика.

Для команды, которая работает как floop [ --student=<name> ] <directory> или floop [ -s <name> ] <directory>

#compdef floop

local context state line

_arguments \
  '(--student -s)'{--student=,-s}"[student name to filter on]:student:->students" \
  "*:directory:_files -/"

case $state in
students)
    students=($(echo 'chris pat lynn paige'))
    _describe -t students "a student's name" students && return 0
    ;;
esac

Замените команду echo массивом букв zsh или командой, которая генерирует варианты для опции студента.

"*:directory:_files -/" предназначена для позиционного аргумента пути к каталогу.

Есть способы контролировать, может ли опция появляться несколько раз или всегда должна быть отдельным словом (без "=") и т.д., Но этот пример является довольно простым примером.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .