

**本文件 AWS CLI 僅適用於 第 1 版。**

我們已宣布即將end-of-support。 AWS CLI 我們建議您遷移至 第 2 AWS CLI 版。如需日期、其他詳細資訊和如何遷移的資訊，請參閱 [公告](https://aws.amazon.com/blogs/developer/cli-v1-maintenance-mode-announcement/)。如需 第 2 版的相關文件 AWS CLI，請參閱 第 [2 版使用者指南](https://docs.aws.amazon.com/cli/latest/userguide/)。

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 中設定命令完成 AWS CLI
<a name="cli-configure-completion"></a>

 AWS Command Line Interface (AWS CLI) 包含與 bash 相容的命令完成功能，可讓您使用 **Tab** 鍵來完成部分輸入的命令。您需要在大多數系統上手動設定此功能。

**Topics**
+ [運作方式](#cli-command-completion-about)
+ [在 Linux 或 macOS 上設定命令完成](#cli-command-completion-linux)
+ [在 Windows 上設定命令完成](#cli-command-completion-windows)

## 運作方式
<a name="cli-command-completion-about"></a>

當您輸入命令、參數或選項的部分內容時，命令完成功能會自動完成您的命令，或顯示建議的命令清單。若要提示命令完成，請輸入命令的部分內容，然後按下完成鍵 (在大部分 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* 以顯示建議的資源值清單。此功能僅適用於 第 2 AWS CLI 版。

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

## 在 Linux 或 macOS 上設定命令完成
<a name="cli-command-completion-linux"></a>

若要在 Linux 或 macOS 上設定命令完成，您必須知道正在使用的 Shell 名稱及 `aws_completer` 指令碼的位置。

**注意**  
在執行 Amazon Linux 的 Amazon EC2 執行個體上，預設會自動設定和啟用命令完成。

**Topics**
+ [確認完成標籤的資料夾位於您的路徑中](#cli-command-completion-path)
+ [啟用命令完成](#cli-command-completion-enable)
+ [驗證命令完成](#cli-command-completion-test)

### 確認完成標籤的資料夾位於您的路徑中
<a name="cli-command-completion-path"></a>

若要讓 AWS 完成器成功運作， `aws_completer` 必須在 shell 的路徑中。`which` 命令可以檢查完成標籤是否位於您的路徑中。

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

如果該命令找不到完成標籤，請使用下列步驟將完成標籤的資料夾新增到您的路徑中。

#### 步驟 1：尋找 AWS 完成者
<a name="cli-command-completion-locate"></a>

 AWS 完成器的位置可能會因使用的安裝方法而有所不同。
+ **Package Manager** - 如 `pip`、`yum`、 `brew`和 等程式`apt-get`通常會將 AWS 完成器 （或與其的符號連結） 安裝到標準路徑位置。
  + 如果您使用的是**不含** `--user` 參數的 `pip`，預設路徑為 `/usr/local/bin/aws_completer`。
  + 如果您使用的是**包含** `--user` 參數的 `pip`，預設路徑為 `/home/username/.local/bin/aws_completer`。
+ **Bundled Installer** – 如果您使用的是 Bundled Installer，預設路徑為 `/usr/local/bin/aws_completer`。

如果所有其他失敗，您可以使用 `find`命令來搜尋檔案系統是否有 AWS 完成程式。

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

#### 步驟 2：識別您的 Shell
<a name="cli-command-completion-shell"></a>

若要識別您使用的是哪一種 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：將完成標籤新增到您的路徑
<a name="cli-command-completion-path-add"></a>

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

### 啟用命令完成
<a name="cli-command-completion-enable"></a>

在確認完成標籤位於您的路徑中後，請為您正在使用的 Shell 執行適當的命令，從而啟用命令完成。您可以新增命令到 Shell 的設定檔，以在每次開啟新 Shell 時執行該檔案。在每個命令中，將 */usr/local/bin/* 路徑取代為 [確認完成標籤的資料夾位於您的路徑中](#cli-command-completion-path) 中在您系統上找到的路徑。
+ **`bash`** - 使用內建命令 `complete`。

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

  新增先前的命令到 `~/.bashrc`，以在每次開啟新 Shell 時執行該檔案。您的 `~/.bash_profile` 應指定 `~/.bashrc` 的來源，以確保命令也會在登入 Shell 中執行。
+  **`zsh`** – 若要執行命令完成，您必須將下列自動載入行加到 `~/.zshrc` 設定檔指令碼末尾，以執行 `bashcompinit`。

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

  若要啟用命令完成，請使用內建命令 `complete`。

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

  新增先前的命令到 `~/.zshrc`，以在每次開啟新 Shell 時執行該檔案。
+  **`tcsh`** - `tcsh` 的完成採用文字類型及模式來定義完成行為。

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

  新增先前的命令到 `~/.tcshrc`，以在每次開啟新 Shell 時執行該檔案。

啟用命令完成後，[驗證命令完成](#cli-command-completion-test) 開始運作。

### 驗證命令完成
<a name="cli-command-completion-test"></a>

啟用命令完成之後，請重新載入您的 Shell、輸入命令的部分文字並按下 **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. 啟用命令完成之後，請重新載入您的 Shell、輸入命令的部分文字並按下 **Tab**，以循環查看可用的命令。

   ```
   $ aws sTab
   ```

   ```
   $ aws s3
   ```

   若要查看完成結果適用的所有可用命令，請輸入部分命令，然後按 **Ctrl** \$1 **Space**。

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