You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Makefile传递含特殊字符的AWS密钥至Skaffold时变量求值失败求助

Makefile传递含特殊字符的AWS凭证给Skaffold失败

我在写Makefile时遇到问题:从AWS Secrets Manager拉取数据库凭证,传递给Skaffold时,含特殊字符的密码被Shell错误解析,导致执行失败。试过用单引号、双引号包裹变量,也试过加$$转义,都没解决。平时都是赶时间在实操里学,每次都手忙脚乱,完全没乐趣,也不知道怎么系统提升这方面的技能。

我的Makefile代码

production-release:
    $(eval creds := $(shell aws --profile $(AWS_PROFILE) secretsmanager get-secret-value --secret-id $(RDS_SECRET_ID) --query SecretString --output json))
    $(eval user := $(shell echo $(creds) | jq -r .username))
    $(eval password := $(shell echo $(creds) | jq -r .password))
    @$(MAKE) .skaffold-build PROFILE=production PG_USER=$(user) PG_PASSWORD=$(password)

错误输出

/bin/bash: line 1: GPhADd-6Y: No such file or directory

注:完整密码是O}Kyfg|42t$~*!.w_f<GPhADd-6Y,里面的<被Shell当成了重定向符号,导致把后面的GPhADd-6Y当作文件名解析,所以报错找不到文件。

解决方法

问题核心是Make展开变量后,Shell会解析密码里的特殊字符(比如$、<、|、!这些)。可以通过两种方式修复:

方式一:给变量值加单引号,避免Shell解析特殊字符

修改Makefile,在传递变量和处理creds时用单引号包裹:

production-release:
    $(eval creds := $(shell aws --profile $(AWS_PROFILE) secretsmanager get-secret-value --secret-id $(RDS_SECRET_ID) --query SecretString --output json))
    $(eval user := $(shell echo '$(creds)' | jq -r .username))
    $(eval password := $(shell echo '$(creds)' | jq -r .password))
    @$(MAKE) .skaffold-build PROFILE=production PG_USER='$(user)' PG_PASSWORD='$(password)'
  • 用echo '$(creds)'确保creds里的特殊字符不会被Shell提前解析
  • 传递PG_USER='$(user)'和PG_PASSWORD='$(password)',让Shell把整个字符串当作单一参数处理

方式二:直接在Shell环境中定义变量,减少Make的eval操作

这种方式跳过Make的变量展开,直接在Shell里完成凭证获取和变量定义:

production-release:
    @PG_USER="$$(aws --profile $(AWS_PROFILE) secretsmanager get-secret-value --secret-id $(RDS_SECRET_ID) --query SecretString --output json | jq -r .username)" \
    PG_PASSWORD="$$(aws --profile $(AWS_PROFILE) secretsmanager get-secret-value --secret-id $(RDS_SECRET_ID) --query SecretString --output json | jq -r .password)" \
    $(MAKE) .skaffold-build PROFILE=production
  • 用$$让Make把$传递给Shell,避免Make提前展开命令
  • 变量值用双引号包裹,Shell会保留特殊字符的原样

内容的提问来源于stack exchange,提问作者set92

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 19:50:59