필자가 작성한 일부 사용자 정의 함수에 대해 완료 함수를 작성하려고하지만 가장 기본적인 기능조차도 실제로 어려움을 겪고있는 것 같습니다.
예제 기능은 다음과 같습니다.
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-completions 저장소를 보았지만 필요한 것과 비슷한 것을 찾지 못하는 것 같습니다.
시작하는 데 도움이 될 것입니다!
최신 정보
@ cuonglm 's answer을 기반으로 다음을 사용했습니다.
#compdef ebinstances
_ebinstances() {
local state
_arguments \
'1: :->aws_profile'\
'*: :->eb_name'
case $state in
(aws_profile) _arguments '1:profiles:($(sed -n -E "s/\[([a-zA-Z0-9_\-]+)\]/\1/p" ~/.aws/credentials | tr \\n " "))' ;;
(*) compadd "$@" foo bar
esac
}
_ebinstances "$@"
원래 질문에서 언급 한 것을 잊어 버린 것은 두 번째 인수의 완료가 첫 번째 인수 (둘 다 코드를 실행하는 동적 기반)에 종속되기를 원한다는 것입니다.
$ eb_instances <cursor>TAB
cuonglm test
내가 원하는 완성을 얻습니다. 첫 번째 말을 선택하고 자동 완성을 시도하십시오.
$ eb_instances cuonglm <cursor>TAB
나는 실행하여 완료 옵션을 생성하려면 eb_names cuonglm
, 올바른 후보가 있다면 가능하면, 또한, 예를 들면 완료에 드릴 다운 foo-bar
,
$ eb_instances cuonglm foo<cursor>TAB
다음을 실행하여 완료 옵션을 생성하고 싶습니다. eb_names cuonglm foo
cuonglm test
에서 온sed -n -E 's/\[([a-zA-Z0-9_\-]+)\]/\1/p' ~/.aws/credentials | tr \\n ' '