Colin Armstrong
Colin Armstrong

Reputation: 1990

How to turn off the pager for AWS CLI return value?

I am attempting to utilize the AWS CLI along with a for loop in bash to iteratively purge multiple SQS message queues. The bash script works almost as intended, the problem I am having is with the return value each time the AWS CLI sends a request. When the request is successful, it returns an empty value and opens up an interactive pager in the command line. I then have to manually type q to exit the interactive screen and allow the for loop to continue to the next iteration. This becomes very tedious and time consuming when attempting to purge a large number of queues.

Is there a way to configure AWS CLI to disable this interactive pager from popping up for every return value? Or a way to pipe the return values into a separate file instead of being displayed?

I have played around with configuring different return value types (text, yaml, JSON) but haven't had any luck. Also the --no-pagination parameter doesn't change the behavior.

Here's an example of the bash script I'm trying to run:

for x in 1 2 3; do 
  aws sqs purge-queue --queue-url https://sqs.<aws-region>.amazonaws.com/<id>/<env>-$x-<queueName>.fifo; 
done

Upvotes: 120

Views: 51598

Answers (7)

domdambrogia
domdambrogia

Reputation: 2243

According to their docs, this can be done with the following solutions:

  • Using the cli_pager setting in the config file in the default or named profile.
  • Using the AWS_PAGER environment variable.
  • Using the PAGER environment variable.

There are thorough explanations in their docs that I won't reiterate here.


However, when needing to do a quick one-off usage, these are both valid solutions:

aws sts get-caller-identity | cat
aws sts get-caller-identity --no-cli-pager

Upvotes: 2

nakamume
nakamume

Reputation: 800

You can disable pager either by exporting AWS_PAGER="" or by modifying you AWS cli config file.

export AWS_PAGER="" 

### or update your ~/.aws/config with 

[default]
cli_pager=

Alternatively, you can enable the default pager to output of less program as

export AWS_PAGER="less" 

or corresponding config change.

Ref: https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-pagination.html#cli-usage-pagination-clientside

Upvotes: 57

OutNSpace
OutNSpace

Reputation: 413

Inside your ~/.aws/config file, add:

cli_pager=

Upvotes: 6

Danylo Fedorov
Danylo Fedorov

Reputation: 1101

You can also use --no-cli-pager in AWS CLI version 2.

See the "Client-side pager" section here https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-pagination.html

Upvotes: 92

steven87vt
steven87vt

Reputation: 540

I am using the aws cli v2 via docker and passing the --env AWS_PAGER="" on the docker run command fixed this issue for me on windows 10 using git bash.

I set it up as an alias as well so things work with jq.

How to set your docker env values:

Example alias: docker run --rm -it -v c:/users/me/.aws:/root/.aws --env AWS_PAGER="" amazon/aws-cli

Upvotes: 6

cueedee
cueedee

Reputation: 1873

Just running into this issue myself, I was able to disable the behaviour by invoking the aws cli as AWS_PAGER="" aws ....

Alternatively you could simply export AWS_PAGER="" at the top of your (bash) script.

Source: https://github.com/aws/aws-cli/pull/4702#issue-344978525

Upvotes: 143

DSimon
DSimon

Reputation: 3420

You can set the environment variable PAGER to "cat" to force awscli to not start up less:

PAGER=cat aws sqs list-queues

I set up as a shell alias to make my life easier:

# ~/.zshrc
alias aws="PAGER=cat aws"

Upvotes: 12

Related Questions