whi*_*ear 1 linux bash shell amazon-web-services amazon-ecs
例如执行此命令。
aws ecs list-tasks --cluster aic-prod
Run Code Online (Sandbox Code Playgroud)
然后它返回下面
{
"taskArns": [
"arn:aws:ecs:ap-northeast-1:678100228133:task/aic-prod-cn/ae340032378f4155bd2d0eb4ee60b5c7"
]
}
Run Code Online (Sandbox Code Playgroud)
然后使用ae340032378f4155bd2d0eb4ee60b5c7of return 语句执行下一个命令。
aws ecs execute-command --cluster aic-prod-cn --container AicDjangoContainer --interactive --command '/bin/bash' --task ae340032378f4155bd2d0eb4ee60b5c7
Run Code Online (Sandbox Code Playgroud)
我想用一句话或者shell脚本来做这件事情。是否可以?
我用谷歌搜索了正则表达式,但仍然不清楚。
aws ecs list-tasks --cluster aic-prod | grep taskArns | (regular expression??)
Run Code Online (Sandbox Code Playgroud)
你能提供一些帮助吗?
jq是在 shell 脚本中操作 JSON 的最佳工具。它有一个非常复杂的查询语言。
\n以下是如何使用它来提取所需的字符串。我已经展示了我一步步构建的查询,以便您可以一次看到一步发生的情况:
\n\xe2\x9d\xaf aws ecs list-tasks --cluster aic-prod | jq\n{\n "taskArns": [\n "arn:aws:ecs:ap-northeast-1:678100228133:task/aic-prod-cn/ae340032378f4155bd2d0eb4ee60b5c7"\n ]\n}\n\n\xe2\x9d\xaf aws ecs list-tasks --cluster aic-prod | jq \'.taskArns[0]\'\n"arn:aws:ecs:ap-northeast-1:678100228133:task/aic-prod-cn/ae340032378f4155bd2d0eb4ee60b5c7"\n\n\xe2\x9d\xaf aws ecs list-tasks --cluster aic-prod | jq \'.taskArns[0] | split(":")[-1]\'\n"task/aic-prod-cn/ae340032378f4155bd2d0eb4ee60b5c7"\n\n\xe2\x9d\xaf aws ecs list-tasks --cluster aic-prod | jq \'.taskArns[0] | split(":")[-1] | split("/")[-1]\'\n"ae340032378f4155bd2d0eb4ee60b5c7"\nRun Code Online (Sandbox Code Playgroud)\n下一步是添加,-r以便打印不带引号的原始字符串,并用于$(...)捕获输出,以便我们可以在第二个命令中重用它。
task_id=$(aws ecs list-tasks --cluster aic-prod | jq -r \'.taskArns[0] | split(":")[-1] | split("/")[-1]\')\naws ecs execute-command --cluster aic-prod-cn --container AicDjangoContainer --interactive --command \'/bin/bash\' --task "$task_id"\nRun Code Online (Sandbox Code Playgroud)\n另一种写法是xargs,它获取一个命令的输出并将其作为参数传递给下一个命令。
aws ecs list-tasks --cluster aic-prod |\n jq -r \'.taskArns[0] | split(":")[-1] | split("/")[-1]\' |\n xargs aws ecs execute-command --cluster aic-prod-cn --container AicDjangoContainer --interactive --command \'/bin/bash\' --task\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
519 次 |
| 最近记录: |