How to Enable AWS CLI Tab Completion on zsh and bash

Table of Contents

Introduction

Command-line tab completion speeds up AWS CLI usage and reduces typos. With a few lines in your shell profile, you can enable context-aware completions for services, subcommands, parameters, and even resource ARNs. This guide shows the minimal, reliable setup for both Bash and Zsh on macOS and Linux, including a quick way to find the correct aws_completer path for your system.

Step-by-Step Implementation

1) Confirm AWS CLI installation

aws --version
# Example output (version can vary)
# aws-cli/2.15.0 Python/3.11.6 ...

You need AWS CLI v2 for the best completion experience.

2) Locate aws_completer

command -v aws_completer || type -p aws_completer

Common locations:

  • macOS (Apple Silicon, Homebrew): /opt/homebrew/bin/aws_completer
  • macOS (Intel, Homebrew): /usr/local/bin/aws_completer
  • Linux (AWS CLI v2 installer): /usr/local/bin/aws_completer

Note the absolute path. Use it in the next steps if command -v doesn’t resolve it automatically.

3) Enable completion for bash

Append the following to your ~/.bashrc (or ~/.bash_profile on macOS if you primarily launch login shells):

# AWS CLI tab completion (bash)
if command -v aws_completer >/dev/null 2>&1; then
  complete -C aws_completer aws
elif [ -x "/usr/local/bin/aws_completer" ]; then
  complete -C "/usr/local/bin/aws_completer" aws
elif [ -x "/opt/homebrew/bin/aws_completer" ]; then
  complete -C "/opt/homebrew/bin/aws_completer" aws
fi

Reload your shell configuration:

# Linux
source ~/.bashrc
# macOS (if using bash_profile)
source ~/.bash_profile

Test it:

aws s<Tab>
# Expect: s3  s3api  ssm  sso  sts  ...

4) Enable completion for zsh

Zsh can reuse Bash-style completions via bashcompinit. Append to your ~/.zshrc:

# AWS CLI tab completion (zsh)
autoload -Uz compinit && compinit
autoload -Uz bashcompinit && bashcompinit

if command -v aws_completer >/dev/null 2>&1; then
  complete -C aws_completer aws
elif [ -x "/usr/local/bin/aws_completer" ]; then
  complete -C "/usr/local/bin/aws_completer" aws
elif [ -x "/opt/homebrew/bin/aws_completer" ]; then
  complete -C "/opt/homebrew/bin/aws_completer" aws
fi

Reload and test:

source ~/.zshrc
aws cl<Tab>
# Expect: clearly expanded to 'cloudformation', 'cloudwatch', etc.

5) Optional: make aws_completer discoverable

If it aws_completer isn’t on yours,PATH either add its directory to PATH or hardcode the absolute path in the complete -C line. For example, on Apple Silicon macOS with Homebrew:

# In ~/.zshrc or ~/.bashrc
echo 'export PATH="/opt/homebrew/bin:$PATH"' >> ~/.zshrc
# or
complete -C "/opt/homebrew/bin/aws_completer" aws

6) How it works (at a glance)

Conclusion

Once configured, tab completion dramatically speeds up AWS CLI work and reduces mistakes. Keep your shell’s PATH correct and ensure the complete -C ... aws line loads in every session. If you upgrade or move the AWS CLI, re-check aws_completer path and update your shell profile accordingly.