Makefile如何遍历子make返回值调用目标批量获取AWS SSM参数
问题原因
你写的params目标没有正确捕获params-list的执行输出,而是将make params-list当成普通字符串遍历,因此运行失败。
正确实现
方法1:复用现有目标实现
在shell层转义后捕获params-list的输出再遍历即可,加-s参数可以屏蔽make本身的执行日志,输出更干净:
.PHONY: params params: @for param in $$($(MAKE) -s params-list); do \ $(MAKE) -s params-get PARAM=$${param}; \ done
关键注意点:
- Makefile中的
$需要转义,写两个$$才会被传递到shell层解析为命令捕获符$() - 遍历变量
$${param}的双$也是同理,避免被Makefile提前解析变量
方法2:直接合并逻辑(性能更高)
不需要反复调用make子进程,直接把两个步骤的逻辑合并,执行效率更高:
.PHONY: params params: @aws ssm get-parameters-by-path --path /${SERVICE}/${ENV} | jq -c -r '.Parameters[] | .Name' | while read -r param; do \ aws ssm get-parameter --name "$$param" --with-decryption | jq -c -r .Parameter.Value; \ done
内容的提问来源于stack exchange,提问作者Javier García
相关产品推荐
相关产品推荐

