

# AWS CLI에서 명령 완성 구성
<a name="cli-configure-completion"></a>

AWS Command Line Interface(AWS CLI)에는 **Tab** 키를 사용하여 부분적으로 입력된 명령을 완성할 수 있는 bash 호환 명령 완성 기능이 포함되어 있습니다. 이 기능은 대부분의 시스템에서 수동으로 구성해야 합니다.

대신 사용할 수 있는 AWS CLI 버전 2 자동 프롬프트 기능에 대한 자세한 내용은 [AWS CLI에서 명령 프롬프트 활성화 및 사용](cli-usage-parameters-prompting.md) 섹션을 참조하세요.

**Topics**
+ [작동 방식](#cli-command-completion-about)
+ [Linux 또는 macOS에서 명령 완성 구성](#cli-command-completion-linux)
+ [Windows에서 명령 완료 구성](#cli-command-completion-windows)

## 작동 방식
<a name="cli-command-completion-about"></a>

명령, 파라미터 또는 옵션을 부분적으로 입력하면 명령 완성 기능이 자동으로 명령을 완성하거나 제안된 명령 목록을 표시합니다. 명령 완성 메시지를 표시하려면 명령을 부분적으로 입력하고 완성 키(대부분의 셸에서 *Tab* 키)를 누릅니다.

다음 예제에서는 명령 완성을 사용할 수 있는 여러 가지 방법을 보여줍니다.
+ 명령을 부분적으로 입력하고 *Tab* 키를 눌러 제안된 명령 목록을 표시합니다.

  ```
  $ aws dynamodb dTAB
  delete-backup                        describe-global-table
  delete-item                          describe-global-table-settings
  delete-table                         describe-limits
  describe-backup                      describe-table
  describe-continuous-backups          describe-table-replica-auto-scaling
  describe-contributor-insights        describe-time-to-live
  describe-endpoints
  ```
+ 파라미터를 부분적으로 입력하고 *Tab* 키를 눌러 제안된 파라미터 목록을 표시합니다.

  ```
  $ aws dynamodb delete-table --TAB
  --ca-bundle              --endpoint-url           --profile              
  --cli-connect-timeout    --generate-cli-skeleton  --query                
  --cli-input-json         --no-paginate            --region               
  --cli-read-timeout       --no-sign-request        --table-name           
  --color                  --no-verify-ssl          --version              
  --debug                  --output
  ```
+ 파라미터를 입력하고 *Tab* 키를 눌러 제안된 리소스 값 목록을 표시합니다. 이 기능은 AWS CLI 버전 2에서만 사용할 수 있습니다.

  ```
  $ aws dynamodb delete-table --table-name TAB
  Table 1                  Table 2                  Table 3
  ```

## Linux 또는 macOS에서 명령 완성 구성
<a name="cli-command-completion-linux"></a>

Linux 또는 macOS에서 명령 완성을 구성하려면 사용 중인 셸의 이름과 `aws_completer` 스크립트의 위치를 알아야 합니다.

**참고**  
Amazon Linux를 실행하는 Amazon EC2 인스턴스에서는 기본적으로 명령 완성이 자동으로 구성되고 활성화됩니다.

**Topics**
+ [경로에 completer 폴더가 있는지 확인](#cli-command-completion-path)
+ [명령 완성 활성화](#cli-command-completion-enable)
+ [명령 완성 확인](#cli-command-completion-test)

### 경로에 completer 폴더가 있는지 확인
<a name="cli-command-completion-path"></a>

AWS completer가 성공적으로 작동하려면 셀의 경로에 `aws_completer`가 있어야 합니다. `which` 명령을 사용하여 경로에 completer가 있는지 확인할 수 있습니다.

```
$ which aws_completer
/usr/local/bin/aws_completer
```

이 명령으로 completer를 찾을 수 없는 경우 다음 단계를 사용하여 경로에 completer의 폴더를 추가합니다.

#### 1단계: AWS completer 찾기
<a name="cli-command-completion-locate"></a>

 AWS Completer의 위치는 사용한 설치 방법에 따라 다를 수 있습니다.
+ **패키지 관리자** - `pip`, `yum`, `brew` 및 `apt-get`과 같은 프로그램은 일반적으로 AWS completer(또는 이 기능에 대한 symlink)를 표준 경로 위치에 설치합니다.
  + `pip`을 `--user` 파라미터 **없이** 사용한 경우 기본 경로는 `/usr/local/bin/aws_completer`입니다.
  + `pip`을 `--user` 파리미터와 **함께** 사용한 경우 기본 경로는 `/home/username/.local/bin/aws_completer`입니다.
+ **번들에 포함된 설치 관리자** - 번들에 포함된 설치 관리자를 사용한 경우 기본 경로는 `/usr/local/bin/aws_completer`입니다.

다른 모든 방법이 실패하면 `find` 명령을 사용하여 파일 시스템에서 AWS completer를 검색할 수 있습니다.

```
$ find / -name aws_completer
/usr/local/bin/aws_completer
```

#### 2단계: 셸 식별
<a name="cli-command-completion-shell"></a>

사용 중인 셸을 식별하려면 다음 명령 중 하나를 사용하면 됩니다.
+ **echo \$1SHELL** - 셸의 프로그램 파일 이름을 표시합니다. 이 항목은 로그인 후 다른 셸을 시작하지 않은 한 일반적으로 사용 중인 셸의 이름과 일치합니다.

  ```
  $ echo $SHELL
  /bin/bash
  ```
+ **ps** - 현재 사용자에 대해 실행 중인 프로세스를 표시합니다. 그 중 하나가 셸입니다.

  ```
  $ ps
    PID TTY          TIME CMD
   2148 pts/1    00:00:00 bash
   8756 pts/1    00:00:00 ps
  ```

#### 3단계: 경로에 completer 추가
<a name="cli-command-completion-path-add"></a>

1. 사용자 폴더에서 셸의 프로파일 스크립트를 찾습니다.

   ```
   $ ls -a ~/
   .  ..  .bash_logout  .bash_profile  .bashrc  Desktop  Documents  Downloads
   ```
   + **Bash** – `.bash_profile`, `.profile` 또는 `.bash_login`
   + **Zsh** –`.zshrc` 
   + **Tcsh** - `.tcshrc`, `.cshrc` 또는 `.login`

1. 다음 예제와 유사한 프로필 스크립트 끝에 내보내기 명령을 추가합니다. `/usr/local/bin/`을 이전 섹션에서 검색한 폴더의 이름으로 바꿉니다.

   ```
   export PATH=/usr/local/bin/:$PATH
   ```

1. 현재 세션에 프로필을 다시 로드하여 해당 변경 사항을 적용합니다. `.bash_profile`을 첫 섹션에서 검색한 shell 스크립트의 이름으로 바꿉니다.

   ```
   $ source ~/.bash_profile
   ```

### 명령 완성 활성화
<a name="cli-command-completion-enable"></a>

completer가 경로에 있는지 확인한 후에는 사용 중인 셸에 적합한 명령을 실행하여 명령 완성을 활성화합니다. 셸의 프로파일에 명령을 추가하여 새 셸을 열 때마다 실행되도록 할 수 있습니다. 각 명령에서 */usr/local/bin/* 경로를 시스템에서 찾은 [경로에 completer 폴더가 있는지 확인](#cli-command-completion-path)로 바꿉니다.
+ **`bash`** – 기본 제공 명령인 `complete`를 사용합니다.

  ```
  $ complete -C '/usr/local/bin/aws_completer' aws
  ```

  `~/.bashrc`에 이전 명령을 추가하여 새 셸을 열 때마다 실행되도록 합니다. `~/.bash_profile`은 `~/.bashrc`를 소스로 하여 로그인 셸에서도 이 명령이 실행되도록 합니다.
+  **`zsh`** - 명령 완성을 실행하려면 `bashcompinit` 프로파일 스크립트 끝에 다음 자동 로드 행을 추가하여 `~/.zshrc`를 실행해야 합니다.

  ```
  $ autoload bashcompinit && bashcompinit
  $ autoload -Uz compinit && compinit
  ```

  명령 완성을 사용하려면 기본 제공 명령 `complete`를 사용합니다.

  ```
  $ complete -C '/usr/local/bin/aws_completer' aws
  ```

  `~/.zshrc`에 이전 명령을 추가하여 새 셸을 열 때마다 실행되도록 합니다.
+  **`tcsh`** - `tcsh`의 경우 단어 유형 및 패턴을 가져와서 완성 동작을 정의하는 방식으로 완성을 수행합니다.

  ```
  > complete aws 'p/*/`aws_completer`/'
  ```

  `~/.tcshrc`에 이전 명령을 추가하여 새 셸을 열 때마다 실행되도록 합니다.

명령 완성을 활성화한 후 명령 완성이 작동하는지 확인([명령 완성 확인](#cli-command-completion-test))합니다.

### 명령 완성 확인
<a name="cli-command-completion-test"></a>

명령 완성을 활성화한 후 셸을 다시 로드하고 부분 명령을 입력한 다음 **Tab** 키를 눌러 사용 가능한 명령을 봅니다.

```
$ aws sTAB
s3              ses             sqs             sts             swf
s3api           sns             storagegateway  support
```

## Windows에서 명령 완료 구성
<a name="cli-command-completion-windows"></a>

**참고**  
다양한 완성 키를 포함하여 PowerShell이 완성을 처리하는 방법에 대한 자세한 내용은 *Microsoft PowerShell 문서*에서 [about\$1Tab\$1Expansion](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_tab_expansion)을 참조하세요.

Windows에서 PowerShell에 대한 명령 완성을 활성화하려면 PowerShell에서 다음 단계를 수행합니다.

1. 다음 명령을 사용하여 `$PROFILE`을 엽니다.

   ```
   PS C:\> Notepad $PROFILE
   ```

   `$PROFILE`이 없는 경우 다음 명령을 사용하여 사용자 프로필을 생성합니다.

   ```
   PS C:\> if (!(Test-Path -Path $PROFILE ))
   { New-Item -Type File -Path $PROFILE -Force }
   ```

   PowerShell 프로필에 대한 자세한 내용은 *Microsoft Docs* 웹 사이트에서 [Windows PowerShell ISE에서 프로필을 사용하는 방법](https://docs.microsoft.com/en-us/powershell/scripting/windows-powershell/ise/how-to-use-profiles-in-windows-powershell-ise)을 참조하세요.

1. 명령 완성을 활성화하려면 다음 코드 블록을 프로필에 추가하고 저장한 다음 파일을 닫습니다.

   ```
   Register-ArgumentCompleter -Native -CommandName aws -ScriptBlock {
       param($commandName, $wordToComplete, $cursorPosition)
           $env:COMP_LINE=$wordToComplete
           if ($env:COMP_LINE.Length -lt $cursorPosition){
               $env:COMP_LINE=$env:COMP_LINE + " "
           }
           $env:COMP_POINT=$cursorPosition
           aws_completer.exe | ForEach-Object {
               [System.Management.Automation.CompletionResult]::new($_, $_, 'ParameterValue', $_)
           }
           Remove-Item Env:\COMP_LINE     
           Remove-Item Env:\COMP_POINT  
   }
   ```

1. 명령 완성을 활성화한 후 셸을 다시 로드하고 부분 명령을 입력한 다음 **Tab** 키를 눌러 사용 가능한 명령을 순환합니다.

   ```
   $ aws sTab
   ```

   ```
   $ aws s3
   ```

   완성을 위해 사용 가능한 명령을 모두 보려면 부분 명령을 입력하고 **Ctrl**\$1**Space**를 누릅니다.

   ```
   $ aws sCtrl + Space
   s3              ses             sqs             sts             swf
   s3api           sns             storagegateway  support
   ```