aws-vault exec의 프로필과 명령을 zsh의 보충으로 선택할 수 있도록 합니다

aws-vault AWS의 프로필을 지정하여 명령을 실행할 수 있습니다.
$ aws-vault exec my-profile -- aws s3 ls
이 소개 my-profile 섹션과 임의 명령 aws s3 ls 섹션은 탭 키로 보충할 수 있습니다.
demo
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

소스 코드


https://github.com/naitoNanaco/aws-vault-completion

해설


기초를 보완하다

補完スクリプト名 서류 준비
  • #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
    }
    

    참고 자료


    참고하라고 했어요.
  • Zsh: 자체 제작 명령으로 보완
  • zsh 보완 함수의 자작 가져오기
  • zsh의 보완 함수를 만들어 보았습니다
  • 좋은 웹페이지 즐겨찾기