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

6

102

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
Shoon answered 7/2, 2020 at 22:54 Comment(4)
I can't reproduce this, Can you share an example? maybe share with us the SQS or the interactive pager?Pictograph
Did you try echo q | aws sqs ... ?Dhahran
Rewrite the for x (1 2 3), options: for x in 1 2 3, for x in {1..3} and for ((x=1; x<=3; x++)).Dhahran
--no-pagination refers to server-side pagination, for situations where the result of a list command would be too long for the server to respond the full list in a single response. It does not affect client-side pagination.Solitta
H
119

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

Huehuebner answered 24/2, 2020 at 11:11 Comment(5)
Nice find on that Github pull request, that was exactly what I was trying to find in the AWS documentation but never had any luck. Thanks!Shoon
As that source mentions, if you aren't into the env var solution, you can also add cli_pager = cat to your ~/.aws/configCommune
Amazing! finally got rid of the annoying behaviour on my ssm scriptRevulsion
Here's the documentation on this as well as a lot of other useful configuration options: docs.aws.amazon.com/cli/latest/userguide/…Invalidism
And if you don't want the extra feed through cat, you can just set cli_pager = in your aws configHerman
N
79

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

Nightgown answered 23/2, 2021 at 12:46 Comment(0)
J
50

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

Jazzy answered 29/6, 2020 at 3:22 Comment(1)
To update aws configuration file, this command can be used: aws configure set cli_pager "". Append --profile profile-name to disable pager specifically for a profile.Regen
B
9

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"
Bethel answered 21/2, 2020 at 21:13 Comment(1)
Nice, this works. Looks like you can also use PAGER="" to achieve the same result. Thanks!Shoon
E
6

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

Erichericha answered 25/8, 2020 at 20:34 Comment(1)
you have a typo in first line. --env AWS_PAGEER="" two EE. Otherwise thumbs up!Ehlke
W
4

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

cli_pager=

Wallaroo answered 9/12, 2021 at 16:25 Comment(1)
nice approach! works for me. it should belong to some profile, which i missed in the first step docs.aws.amazon.com/cli/latest/userguide/…Justify

© 2022 - 2024 — McMap. All rights reserved.