aws-vault exec의 프로필과 명령을 zsh의 보충으로 선택할 수 있도록 합니다
13461 단어 AWSCLIZshcompletiontech
$ aws-vault exec my-profile -- aws s3 ls
이 소개 my-profile
섹션과 임의 명령 aws s3 ls
섹션은 탭 키로 보충할 수 있습니다.zsh
# サブコマンドの補完
$ aws-vault [Tab]
Completing subcommand
add clear exec help list login remove rotate
# profileの補完
$ aws-vault exec [Tab]
Completing profile
bar-role1 bar-role2 default foo-admin foo-readonly jonsmith
$ aws-vault exec f[Tab]
$ aws-vault exec foo-[Tab]
Completing profile
foo-admin foo-readonly
# コマンドの補完
$ aws-vault exec foo-readonly [Tab]
$ aws-vault exec foo-readonly -- [Tab]
Completing external command
.keepme ifconfig pnmtopng
2to3 ifnames pnmtopnm
2to3- ilbmtoppm pnmtops
2to3-2.7 img2webp pnmtorast
2to3-3.9 imgcmp pnmtorle
...
$ aws-vault exec foo-readonly -- aws e[Tab]
ebs ecr-public elastic-inference elb es
ec2 ecs elasticache elbv2 events
ec2-instance-connect efs elasticbeanstalk emr evidently
ecr eks elastictranscoder emr-containers
소스 코드
해설
기초를 보완하다
補完スクリプト名
서류 준비#compdef コマンド名
補完スクリプト名
함수compdef 補完スクリプト名 コマンド名
._value
함수를 사용하여 첫 번째 파라미터는 보완조 이름으로 설정되고 두 번째 파라미터는 보완 후보로 설정됩니다._arguments
함수를 사용하면 매개 변수의 위치에 따라 동작을 정의할 수 있다.하위 명령 완성
_arguments
함수의 동작->(state-val)
을 기술하여 변수에 값을 설정합니다.state
의 첫 번째 파라미터를 처리할 때aws-vault
설정$state
은 정의된 하위 명령의 목록을 보충 후보로 한다._aws-vault
#compdef aws-vault
_aws-vault() {
# サブコマンドのリスト(補完の候補)
local -a val
val=(help add list rotate exec clear remove login)
_arguments \
'1: :->subcommand' \ # 1つ目の引数処理時のstateを"subcommand"としてセット
case "$state" in
subcommand)
_values $state $val # stateが"subcommand"の際はサブコマンドのリストが候補とする
;;
esac
}
compdef _aws-vault aws-vault
소개의 보완
두 번째 매개 변수 다음에 하위 명령에서 무엇을 선택했는지에 따라 분기 이후의 보완 동작을 선택합니다.
2 매개 변수 이후의 처리 시
"subcommand"
함수로 _arguments
에 $state
를 설정합니다."args"
가 $state
일 때 확인"args"
의 값을 통해 첫 번째 매개 변수 중 어느 것을 확인할 수 있다.$words[1]
시 다시 exec
함수를 사용하여 초기 매개 변수 처리를 할 때_arguments
함수라고 부른다.__aws-vault-profile
함수는 __aws-vault-profile
의 결과에서 프로필 목록을 가져오고 aws-vault ls
함수에 따라 보완 후보로 설정합니다._aws-vault
_aws-vault() {
_arguments \
'1: :->subcommand' \ # 1つ目の引数処理時のstateを"subcommand"としてセット
'*:: :->args' \ # 以降の引数処理時のstateを"args"としてセット
case "$state" in
subcommand)
;;
args)
# サブコマンドに何を選んだかに応じて以降の補完アクションを分岐(今回はexecのみ定義)
case $words[1] in
exec)
_arguments \
'1: :__aws-vault-profile' \ # 1つ目の引数処理時に"__aws-vault-profile"関数を実行
'*:: :__aws-vault-exec-precommand' \
;;
esac
;;
esac
}
__aws-vault-profile() {
# profileのリストを`aws-vault ls`の結果から取得
local -a val
val=(`aws-vault ls | awk 'NR>2 {if ($1 != "-") print $1}'`)
# 取得したリストを補完の候補とする
_values 'profile' $val
}
명령 완성
프로필을 선택한 후
_value
함수 처리를 사용합니다.첫 번째 처리 시 구분자
__aws-vault-exec-precommand
를 보완하기 위해 함수 --
를 호출합니다.이후zsh가 정의한 다른 보충에 모두 의뢰합니다.위탁 시
__aws-vault-delimiter
함수를 사용합니다.(참조: 어떻게 해야만 zsh가 완전한 자동 보완을 계승할 수 있습니까CODE Q&A
_command
함수에서 함수__aws-vault-exec-command
를 호출한다._aws-vault
_aws-vault() {
_arguments \
'1: :->subcommand' \
'*:: :->args' \
case "$state" in
subcommand)
;;
args)
case $words[1] in
exec)
_arguments \
'1: :__aws-vault-profile' \
'*:: :__aws-vault-exec-precommand' \
;;
esac
;;
esac
}
__aws-vault-exec-precommand() {
_arguments \
'1: :__aws-vault-delimiter' \
'*:: :__aws-vault-exec-command' \
}
__aws-vault-delimiter() {
local -a val
val=(--)
_values 'EOC' $val
}
__aws-vault-exec-command() {
_command aws-vault
}
참고 자료
참고하라고 했어요.
Reference
이 문제에 관하여(aws-vault exec의 프로필과 명령을 zsh의 보충으로 선택할 수 있도록 합니다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/na_it_o/articles/cff75e8542d696텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)