首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >处理“aws ecs列表-任务”JSON输出与“aws ecs执行-命令”?

处理“aws ecs列表-任务”JSON输出与“aws ecs执行-命令”?
EN

Stack Overflow用户
提问于 2022-08-20 15:10:31
回答 1查看 125关注 0票数 1

例如,执行以下命令。

代码语言:javascript
复制
aws ecs list-tasks --cluster aic-prod

然后它返回到下面

代码语言:javascript
复制
{
    "taskArns": [
        "arn:aws:ecs:ap-northeast-1:678100228133:task/aic-prod-cn/ae340032378f4155bd2d0eb4ee60b5c7"
    ]
}

然后使用ae340032378f4155bd2d0eb4ee60b5c7的返回语句执行next命令。

代码语言:javascript
复制
aws ecs execute-command --cluster aic-prod-cn --container AicDjangoContainer --interactive --command '/bin/bash' --task ae340032378f4155bd2d0eb4ee60b5c7

我想用一个句子或shell脚本来做这件事。有可能吗?

我搜索了正则表达式,但仍不清楚。

代码语言:javascript
复制
 aws ecs list-tasks --cluster aic-prod | grep taskArns | (regular expression??)

你能帮忙吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-20 15:22:58

用jq操纵JSON

jq是在shell脚本中操作JSON的最佳工具。它有一个相当复杂的查询语言。

下面是如何使用它提取所需的字符串。我已经逐一展示了我构建的查询,这样您就可以一步一步地看到正在发生的事情:

代码语言:javascript
复制
❯ aws ecs list-tasks --cluster aic-prod | jq
{
  "taskArns": [
    "arn:aws:ecs:ap-northeast-1:678100228133:task/aic-prod-cn/ae340032378f4155bd2d0eb4ee60b5c7"
  ]
}

❯ aws ecs list-tasks --cluster aic-prod | jq '.taskArns[0]'
"arn:aws:ecs:ap-northeast-1:678100228133:task/aic-prod-cn/ae340032378f4155bd2d0eb4ee60b5c7"

❯ aws ecs list-tasks --cluster aic-prod | jq '.taskArns[0] | split(":")[-1]'
"task/aic-prod-cn/ae340032378f4155bd2d0eb4ee60b5c7"

❯ aws ecs list-tasks --cluster aic-prod | jq '.taskArns[0] | split(":")[-1] | split("/")[-1]'
"ae340032378f4155bd2d0eb4ee60b5c7"

用$(.)捕获输出

下一步是添加-r,这样它就可以在没有引号的情况下打印字符串,并使用$(...)来捕获输出,这样我们就可以在第二个命令中重用它。

代码语言:javascript
复制
task_id=$(aws ecs list-tasks --cluster aic-prod | jq -r '.taskArns[0] | split(":")[-1] | split("/")[-1]')
aws ecs execute-command --cluster aic-prod-cn --container AicDjangoContainer --interactive --command '/bin/bash' --task "$task_id"

或者使用xargs

另一种编写方法是使用xargs,它接受一个命令的输出并将其作为参数传递给下一个命令。

代码语言:javascript
复制
aws ecs list-tasks --cluster aic-prod |
    jq -r '.taskArns[0] | split(":")[-1] | split("/")[-1]' |
    xargs aws ecs execute-command --cluster aic-prod-cn --container AicDjangoContainer --interactive --command '/bin/bash' --task
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73427797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档