

# Configurar a conclusão do comando na AWS CLI
<a name="cli-configure-completion"></a>

A AWS Command Line Interface (AWS CLI) inclui um recurso de preenchimento automático de comandos que permite usar a tecla **Tab** para concluir o preenchimento um comando inserido parcialmente. Na maioria dos sistemas, esse recurso deve ser configurado manualmente.

Para obter informações sobre o recurso de prompt automático da AWS CLI versão 2, consulte [Habilitar e usar os prompts de comando na AWS CLI](cli-usage-parameters-prompting.md).

**Topics**
+ [Como funciona](#cli-command-completion-about)
+ [Configuração do preenchimento automático de comando no Linux ou no macOS](#cli-command-completion-linux)
+ [Configuração do preenchimento de comandos no Windows](#cli-command-completion-windows)

## Como funciona
<a name="cli-command-completion-about"></a>

Ao inserir parcialmente um comando, um parâmetro ou uma opção, o recurso de conclusão de comando conclui automaticamente o comando ou exibe uma lista sugerida de comandos. Para solicitar a conclusão de comandos, insira parcialmente um comando e pressione a tecla de conclusão, que normalmente é *Tab* na maioria dos shells.

Os exemplos a seguir mostram diferentes maneiras de usar a conclusão de comando:
+ Insira parcialmente um comando e pressione *Tab* para exibir uma lista sugerida de comandos.

  ```
  $ 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
  ```
+ Insira parcialmente um parâmetro e pressione *Tab* para exibir uma lista sugerida de parâmetros.

  ```
  $ 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
  ```
+ Insira um parâmetro e pressione *Tab* para exibir uma lista sugerida de valores de recursos. Esse recurso só está disponível na AWS CLI versão 2.

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

## Configuração do preenchimento automático de comando no Linux ou no macOS
<a name="cli-command-completion-linux"></a>

Para configurar o preenchimento automático de comandos no Linux ou macOS, você deve conhecer o nome do shell que está usando e a localização do script `aws_completer`.

**nota**  
O preenchimento do comando é configurado automaticamente e habilitado por padrão nas instâncias do Amazon EC2 que executam o Amazon Linux.

**Topics**
+ [Confirme se a pasta do completer está na variável path](#cli-command-completion-path)
+ [Habilitar a conclusão de comando](#cli-command-completion-enable)
+ [Verifique o preenchimento de comandos](#cli-command-completion-test)

### Confirme se a pasta do completer está na variável path
<a name="cli-command-completion-path"></a>

Para o completer da AWS funcionar corretamente, o `aws_completer` deverá estar na variável path do seu shell. O comando `which` pode verificar se o completer está na variável path.

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

Se o comando que não conseguir encontrar o completer, use as etapas a seguir para adicionar a pasta do completer à variável PATH.

#### Etapa 1: Localizar o completer da AWS
<a name="cli-command-completion-locate"></a>

 A localização do completer da AWS pode variar, dependendo do método de instalação usado. 
+ **Gerenciador de pacotes**: programas como `pip`, `yum`, `brew` e `apt-get` normalmente instalam o completer da AWS (ou um symlink para ele) em um local que faz parte do caminho padrão. 
  + Se você usou o `pip` **sem** o parâmetro `--user`, o caminho padrão é `/usr/local/bin/aws_completer`.
  + Se você usou o `pip` **com** o parâmetro `--user`, o caminho padrão é `/home/username/.local/bin/aws_completer`.
+ **Instalador empacotado**: se você usou o instalador empacotado, o caminho padrão é `/usr/local/bin/aws_completer`.

Se tudo falhar, você poderá usar o comando `find` para pesquisar o completer da AWS em todo o seu sistema de arquivos. 

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

#### Etapa 2: Identificar o shell
<a name="cli-command-completion-shell"></a>

Para identificar qual shell você está usando, é possível usar um dos seguintes comandos.
+ **echo \$1SHELL**: exibe o nome do arquivo do programa de shell. Isso geralmente corresponde ao nome do shell em uso, a menos que você tenha iniciado um shell diferente após fazer o login.

  ```
  $ echo $SHELL
  /bin/bash
  ```
+ **ps**: exibe os processos em execução para o usuário atual. Um deles é o shell.

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

#### Etapa 3: Adicionar o completer ao caminho
<a name="cli-command-completion-path-add"></a>

1. Encontre o script de perfil do shell em sua pasta de usuário.

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

1. Adicione um comando de exportação ao final do script de perfil que é semelhante ao exemplo a seguir. Substitua `/usr/local/bin/` pela pasta que você descobriu na seção anterior.

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

1. Recarregue o perfil na sessão atual para colocar essas alterações em vigor. Substitua `.bash_profile` pelo nome do script de shell que você descobriu na primeira seção.

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

### Habilitar a conclusão de comando
<a name="cli-command-completion-enable"></a>

Depois de confirmar que o completer está no caminho, habilite a conclusão de comando executando o comando apropriado para o shell que você está usando. Você pode adicionar o comando ao perfil do shell para executá-lo cada vez que você abrir um novo shell. Em cada comando, substitua o caminho */usr/local/bin/* pelo encontrado no seu sistema em [Confirme se a pasta do completer está na variável path](#cli-command-completion-path).
+ **`bash`** – usa o comando interno `complete`.

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

  Adicione o comando anterior ao `~/.bashrc` para executá-lo cada vez que você abrir um novo shell. O `~/.bash_profile` deve se basear em `~/.bashrc` para garantir que o comando também seja executado em shells de login.
+  **`zsh`**: para executar o preenchimento de comandos, é necessário executar `bashcompinit` adicionando a seguinte linha de carregamento automático ao final do script do perfil `~/.zshrc`.

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

  Para habilitar a conclusão de comando, use o comando interno `complete`.

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

  Adicione os comandos anteriores ao `~/.zshrc` para executá-los cada vez que você abrir um novo shell.
+  **`tcsh`**: o preenchimento para `tcsh` utiliza um tipo de palavra e padrão para definir o comportamento do preenchimento. 

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

  Adicione o comando anterior ao `~/.tcshrc` para executá-lo cada vez que você abrir um novo shell.

Depois de habilitar o preenchimento automático de comandos, [Verifique o preenchimento de comandos](#cli-command-completion-test) está funcionando.

### Verifique o preenchimento de comandos
<a name="cli-command-completion-test"></a>

Após habilitar o preenchimento de comandos, insira um comando parcial e pressione **Tab** para ver os comandos disponíveis.

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

## Configuração do preenchimento de comandos no Windows
<a name="cli-command-completion-windows"></a>

**nota**  
Para obter informações sobre como o PowerShell lida com a conclusão, incluindo as várias teclas de conclusão, consulte [about\$1tab\$1Expansion](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_tab_expansion) na *documentação do Microsoft PowerShell*.

Para habilitar o preenchimento de comandos para o PowerShell no Windows, conclua as etapas a seguir no PowerShell.

1. Abra o arquivo `$PROFILE` com o comando a seguir.

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

   Se você ainda não tiver um `$PROFILE`, use o procedimento a seguir para criar um perfil de usuário.

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

   Para obter mais informações sobre os perfis do PowerShell, consulte [Como usar perfis no Windows PowerShell ISE](https://docs.microsoft.com/en-us/powershell/scripting/windows-powershell/ise/how-to-use-profiles-in-windows-powershell-ise) no site de *Documentação da Microsoft*.

1. Para ativar o preenchimento de comandos, adicione o seguinte bloco de código ao seu perfil, salve e, em seguida, feche o arquivo.

   ```
   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. Depois de habilitar a conclusão dos comandos, recarregue o shell, insira um comando parcial e pressione **Tab** para percorrer os comandos disponíveis.

   ```
   $ aws sTab
   ```

   ```
   $ aws s3
   ```

   Para ver todos os comandos disponíveis para conclusão, insira um comando parcial e pressione **Ctrl** \$1 **Espaço**.

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