

**本文档仅适用于 Amazon CLI 版本 1。**

我们已宣布即将终止对 Amazon CLI 版本 1 的支持。建议您迁移到 Amazon CLI 版本 2。有关日期、其它详细信息以及如何迁移的信息，请参阅[公告](https://www.amazonaws.cn/blogs/developer/cli-v1-maintenance-mode-announcement/)。有关 Amazon CLI 版本 2 的相关文档，请参阅[版本 2 用户指南](https://docs.amazonaws.cn/cli/latest/userguide/)。

# 在 Amazon CLI 中配置命令完成
命令完成

Amazon Command Line Interface（Amazon CLI）包含一个与 Bash 兼容的命令完成功能，让您可以使用 **Tab** 键完成部分输入的命令。在大多数系统上，您需要手动配置此功能。

**Topics**
+ [

## 工作原理
](#cli-command-completion-about)
+ [

## 在 Linux 或 macOS 上配置命令完成
](#cli-command-completion-linux)
+ [

## 在 Windows 上配置命令完成
](#cli-command-completion-windows)

## 工作原理


当您部分输入命令、参数或选项时，命令完成功能会自动完成您的命令或显示建议的命令列表。要提示命令完成，请输入命令的一部分并按完成键（在大多数 Shell 中，它通常为 *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* 键以显示建议的资源值列表。此功能仅在 Amazon CLI 版本 2 中可用。

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

## 在 Linux 或 macOS 上配置命令完成


要在 Linux 或 macOS 上配置命令完成，您必须知道所使用的 Shell 的名称和 `aws_completer` 脚本的位置。

**注意**  
默认情况下，在运行 Amazon Linux 的 Amazon EC2 实例上自动配置和启用命令完成。

**Topics**
+ [

### 确认完成标签的文件夹在您的路径中
](#cli-command-completion-path)
+ [

### 启用命令完成
](#cli-command-completion-enable)
+ [

### 验证命令完成
](#cli-command-completion-test)

### 确认完成标签的文件夹在您的路径中


要让Amazon完成标签成功运行，`aws_completer` 必须在您的 Shell 路径中。`which` 命令可以检查完成标签是否在您的路径中。

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

如果 which 命令找不到完成标签，则按照以下步骤将完成标签的文件夹添加到您的路径中。

#### 步骤 1：定位Amazon完成标签


 Amazon 完成标签的位置可能随所用安装方法而异。
+ **程序包管理器** – `pip`、`yum`、`brew` 和 `apt-get` 等程序通常在标准路径位置安装Amazon完成标签（或其符号链接）。
  + 如果您使用**没有** `pip` 参数的`--user`，则默认路径为 `/usr/local/bin/aws_completer`。
  + 如果您使用**包含** `pip` 参数的`--user`，则默认路径为 `/home/username/.local/bin/aws_completer`。
+ **捆绑安装程序** – 如果您使用捆绑安装程序，则默认路径为 `/usr/local/bin/aws_completer`。

如果所有其他操作都失败，您可以使用 `find` 命令在您的文件系统中搜索Amazon完成标签。

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

#### 步骤 2：识别 Shell


要识别您正在使用的 Shell，可以使用以下命令之一。
+ **echo \$1SHELL** – 显示 Shell 的程序文件名称。这通常会与所使用的 Shell 的名称匹配，除非您在登录后启动了不同的 Shell。

  ```
  $ echo $SHELL
  /bin/bash
  ```
+ **ps** – 显示为当前用户运行的进程。其中之一是 Shell。

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

#### 步骤 3：将完成标签添加到您的路径中


1. 在您的用户文件夹中查找 Shell 的配置文件脚本。

   ```
   $ 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
   ```

### 启用命令完成


确认完成标签在您的路径中后，通过运行正在使用的 Shell 的相应命令来启用命令完成。您可以将命令添加到 Shell 的配置文件中，以便在每次打开一个新 Shell 时运行它。在每个命令中，将 */usr/local/bin/* 路径替换为 [确认完成标签的文件夹在您的路径中](#cli-command-completion-path) 中在您的系统上找到的那个。
+ **`bash`** – 使用内置命令 `complete`。

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

  将之前的命令添加到 `~/.bashrc` 中，以便在每次打开一个新外壳程序时运行它。您的 `~/.bash_profile` 应指定源 `~/.bashrc`，以确保该命令也在登录 Shell 中运行。
+  **`zsh`** – 要运行命令完成功能，您需要在 `~/.zshrc` 配置文件脚本的末尾添加以下自动加载行来运行 `bashcompinit`。

  ```
  $ 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) 正在工作。

### 验证命令完成


启用命令完成后，重新加载 Shell，输入部分命令并按 **Tab** 查看可用命令。

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

## 在 Windows 上配置命令完成


**注意**  
有关 PowerShell 如何处理其完成情况（包括各种完成密钥）的信息，请参阅 *Microsoft PowerShell Docs* 中的 [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. 启用命令完成功能后，重新加载 Shell，输入命令的一部分并按 **Tab** 可循环浏览可用命令。

   ```
   $ aws sTab
   ```

   ```
   $ aws s3
   ```

   要查看完成后可用的所有命令，请输入命令的一部分并按 **Ctrl** \$1 **空格键**。

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