管理人Kのひとりごと

デジモノレビューやプログラミングや写真など

Docker版awscliの出力をjqでパースしようとするとエラーが発生する(対処法あり)

Docker版awscliの出力(json)をjqでパースしようとしたところ、エラーが発生しました。

検証環境

hoge@fuga:~$ docker --version
Docker version 26.1.4, build 5650f9b
hoge@fuga:~$ aws --version
aws-cli/2.16.6 Python/3.11.8 Linux/6.6.25-01713-g2f237acc8e50 docker/x86_64.amzn.2
hoge@fuga:~$ jq --version
jq-1.6

エラー内容

suke@penguin:~$ aws iam list-users | jq '.Users[].UserName'
parse error: Invalid numeric literal at line 1, column 2

# 期待値
hoge@fuga:~$ aws iam list-users | jq '.Users[].UserName'
"user1"
"user2"
"user3"

原因及び対処法

原因

原因は、dockerコマンド実行時の't'オプションにより、実行結果に不要な文字が入っていたため。

docker run --rm -it public.ecr.aws/aws-cli/aws-cli command


# 't'オプションありの場合の出力結果
"\u001b[?1h\u001b=\r{\u001b[m\r"
                                "    \"Users\": [\u001b[m\r"
                                                            "        {\u001b[m\r"
                                                                                 "            \"Path\": \"/\",\u001b[m\r"

# 't'オプションなしの場合の出力結果
"{"
"    \"Users\": ["
"        {"
"            \"Path\": \"/\","

対処法

dockerコマンドから't'オプションを除く

docker run --rm -i public.ecr.aws/aws-cli/aws-cli command

参考にしました