

# Configuración de la finalización de comandos en la AWS CLI
<a name="cli-configure-completion"></a>

El AWS Command Line Interface (AWS CLI) incluye una característica de finalización de comandos compatibles con bash que le permite utilizar la tecla **Tab (Tabulador)** para completar un comando introducido parcialmente. En la mayoría de los sistemas, debe configurarlo manualmente.

Para obtener información sobre la característica de petición automática de la versión 2 de AWS CLI, consulte [Activación y uso de los símbolos del sistema en la AWS CLI](cli-usage-parameters-prompting.md).

**Topics**
+ [Funcionamiento](#cli-command-completion-about)
+ [Configuración de la finalización de comandos en Linux o macOS](#cli-command-completion-linux)
+ [Configuración de la finalización de comandos en Windows](#cli-command-completion-windows)

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

Cuando se introduce parcialmente un comando, parámetro u opción, la función de finalización de comandos completa automáticamente el comando o muestra una lista sugerida de comandos. Para solicitar que se complete el comando, ingrese parcialmente un comando y pulse la tecla de finalización, que normalmente es *Tab* (Tabulador) en la mayoría de los shells.

En los ejemplos siguientes se muestran diferentes formas de utilizar la finalización de comandos:
+ Introduzca parcialmente un comando y pulse *Tab (Tabulador)* para mostrar una 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
  ```
+ Introduzca parcialmente un parámetro y pulse *Tab (Tabulador)* para mostrar una 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
  ```
+ Introduzca un parámetro y pulse *Tab (Tabulador)* para mostrar una lista sugerida de valores de recursos. Esta función solo está disponible en la versión 2 de la AWS CLI.

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

## Configuración de la finalización de comandos en Linux o macOS
<a name="cli-command-completion-linux"></a>

Para configurar la finalización de comandos en Linux o macOS, debe conocer el nombre del shell que se está utilizando y la ubicación del script `aws_completer`.

**nota**  
La finalización de comandos se configura y habilita automáticamente de forma predeterminada en las instancias de Amazon EC2 que ejecutan Amazon Linux.

**Topics**
+ [Confirme que la carpeta del Completer está en su ruta](#cli-command-completion-path)
+ [Habilitar la finalización de comandos](#cli-command-completion-enable)
+ [Verifique la finalización de comandos](#cli-command-completion-test)

### Confirme que la carpeta del Completer está en su ruta
<a name="cli-command-completion-path"></a>

Para que el Completer de AWS funcione con éxito, `aws_completer` debe estar en a ruta de su shell. El comando `which` puede verificar si el Completer está en su ruta.

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

Si el comando qué no puede encontrar el completador, siga los pasos siguientes para agregar la carpeta del completer a su ruta.

#### Paso 1: Ubique el Completer de AWS
<a name="cli-command-completion-locate"></a>

 La ubicación del Completer de AWS puede variar en función del método de instalación utilizado. 
+ **Administrador de paquetes**: los programas como `pip`, `yum`, `brew` y `apt-get` suelen instalar el Completer de AWS (o un symlink al mismo) en una ubicación de ruta estándar. 
  + Si utilizó `pip` **sin** el parámetro `--user`, la ruta predeterminada es `/usr/local/bin/aws_completer`.
  + Si utilizó `pip` **con** el parámetro `--user`, la ruta predeterminada es `/home/username/.local/bin/aws_completer`.
+ **Instalador agrupado**: si utilizó el instalador agrupado, la ruta predeterminada es `/usr/local/bin/aws_completer`.

Si no funciona ninguna de las opciones anteriores, puede utilizar el comando `find` para buscar su sistema de archivos para el completer de AWS. 

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

#### Paso 2: Identificación de su shell
<a name="cli-command-completion-shell"></a>

Para identificar qué shell está utilizando, puede usar uno de los siguientes comandos.
+ **echo \$1SHELL**: muestra el nombre de archivo de programa del shell. Normalmente coincide con el nombre del shell en uso, a menos que haya iniciado otro shell tras iniciar sesión.

  ```
  $ echo $SHELL
  /bin/bash
  ```
+ **ps**: muestra los procesos en ejecución para el usuario actual. Uno de ellos es el shell.

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

#### Paso 3: agregar la carpeta del completer a la ruta
<a name="cli-command-completion-path-add"></a>

1. Busque el script de perfil de su shell en su carpeta de usuario.

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

1. Añada un comando de exportación al final del script de su perfil igual que en el siguiente ejemplo. Reemplace `/usr/local/bin/` por el nombre de la carpeta que ha creado en la sección anterior.

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

1. Vuelva a cargar el perfil en la sesión actual para que esos cambios surtan efecto. Reemplace `.bash_profile` por el nombre del script de shell que ha creado en la primera sección.

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

### Habilitar la finalización de comandos
<a name="cli-command-completion-enable"></a>

Después de confirmar que el completer está en su ruta, habilite la finalización de comandos ejecutando el comando apropiado para el shell que está utilizando. Puede agregar el comando a su perfil del shell para que se ejecute cada vez que abra un nuevo shell. En cada comando, reemplace la ruta */usr/local/bin/* por la de su sistema en [Confirme que la carpeta del Completer está en su ruta](#cli-command-completion-path).
+ **`bash`** – use el comando integrado `complete`.

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

  Agregue el comando anterior a `~/.bashrc` para que se ejecute cada vez que abra un nuevo shell. Su `~/.bash_profile` debe obtener `~/.bashrc` para asegurarse de que el comando también se ejecuta en los shells de inicio de sesión.
+  **`zsh`**: ejecutar la finalización de comandos, debe ejecutar `bashcompinit` añadiendo la siguiente línea de carga automática al final del script de perfil de `~/.zshrc`.

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

  Para habilitar la finalización de comandos, utilice el comando integrado `complete`.

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

  Agregue el comando anterior a `~/.zshrc` para que se ejecute cada vez que abra un nuevo shell.
+  **`tcsh`**: la finalización de `tcsh` requiere un tipo de palabra y un patrón para definir el comportamiento de finalización. 

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

  Agregue el comando anterior a `~/.tcshrc` para que se ejecute cada vez que abra un nuevo shell.

Después de habilitar la finalización del comando, [Verifique la finalización de comandos](#cli-command-completion-test) funciona.

### Verifique la finalización de comandos
<a name="cli-command-completion-test"></a>

Tras habilitar la finalización de comandos, vuelva a cargar su shell, escriba parcialmente un comando y pulse la tecla **Tab** (Tabulación) para ver los comandos disponibles.

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

## Configuración de la finalización de comandos en Windows
<a name="cli-command-completion-windows"></a>

**nota**  
Para obtener información sobre cómo PowerShell gestiona la finalización, incluidas las diversas claves de finalización, consulte [about\$1Tab\$1Expansion](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_tab_expansion) en *Documentos de Microsoft PowerShell*.

Para habilitar la finalización de comandos para PowerShell en Windows, siga los pasos siguientes en PowerShell.

1. Abra el archivo `$PROFILE` con el siguiente comando.

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

   Si no dispone de un `$PROFILE`, cree un perfil de usuario mediante el siguiente comando.

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

   Para obtener más información sobre los perfiles de PowerShell, consulte [Cómo utilizar perfiles en ISE de Windows PowerShell](https://docs.microsoft.com/en-us/powershell/scripting/windows-powershell/ise/how-to-use-profiles-in-windows-powershell-ise) en el sitio web de *Documentos de Microsoft*.

1. Para habilitar la finalización de comandos, agregue el siguiente bloque de código a su perfil, guarde y luego cierre el archivo.

   ```
   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. Tras habilitar la finalización de comandos, vuelva a cargar el shell, ingrese parcialmente un comando y pulse la tecla **Tab** (Tabulación) para recorrer los comandos disponibles.

   ```
   $ aws sTab
   ```

   ```
   $ aws s3
   ```

   Para ver todos los comandos disponibles para completar, ingrese parcialmente un comando y pulse **Ctrl** (Control) \$1 **Space** Espacio.

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