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

Terraform可正常调用CircleCI API,为何Bash中Curl传参失败?

CircleCI API调用:Terraform正常但Bash脚本失败的问题与解决

我可以通过Terraform成功调用CircleCI的API,但使用Bash脚本调用时却失败。

可正常运行的Terraform代码

curl -X POST https://circleci.com/api/v2/project/gh/some-organization/${var.repository_name}/envvar \
 -H 'Content-Type: application/json' \
 -H 'Circle-Token: ${data.aws_ssm_parameter.ct[0].value}' \
 -d '{"name":"AWS_ACCOUNT_ID_${upper(var.environment)}","value":"${data.aws_caller_identity.current.account_id}"}'

无法正常运行的Bash代码

#!/bin/bash
user=$1
repo=$2
lower_env=$3
env=$(echo "$lower_env" | tr '[:lower:]' '[:upper:]')
token="1234567890"

......
NEW_ACCESS_KEY_ID="$(aws iam list-access-keys --user-name $user | jq -r '.AccessKeyMetadata[].AccessKeyId')"
......

  curl -X POST https://circleci.com/api/v2/project/gh/some-organization/$repo/envvar \
      -H 'Content-Type: application/json' \
      -H 'Circle-Token:${token}' \
      -d '{"name":"AWS_ACCESS_KEY_ID_${env}","value":"'\''$NEW_ACCESS_KEY_ID'\''"}'

核心问题在于Curl命令中变量(如token)的传递,尝试过多种转义方式均无效,例如:

-H 'Content-Type: application/json' \
      -H 'Circle-Token: '\''$token'\'' \
      -d '{"name":"AWS_SECRET_ACCESS_KEY_${upper('\''$env'\'')}","value":"'\''$NEW_SECRET_ACCESS_KEY'\''"}'

曾将Curl命令打印出来,格式看起来是正确的:

curl -X POST https://circleci.com/api/v2/project/gh/some-ogranization/repo-from-token/envvar -H 'Circle-Token: 1234567890'

可行解决方案代码

curl -X POST "https://circleci.com/api/v2/project/gh/some-organization/$repo/envvar" \
      -H "Content-Type: application/json" \
      -H "Circle-Token: $token" \
      -d "{\"name\":\"AWS_ACCESS_KEY_ID_${env}\",\"value\":\"$NEW_ACCESS_KEY_ID\"}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 17:27:49