You need to enable JavaScript to run this app. Terraform remote-exec执行EC2命令特殊字符转义报错求解
优惠活动
大模型
产品
解决方案
定价
更多

Terraform remote-exec执行EC2命令特殊字符转义报错求解

问题原因

你遇到的报错来自两个HCL语法冲突:

  • HCL会自动识别${}为自身的插值语法,会尝试在配置渲染阶段解析,不会原样传递给EC2实例的shell执行
  • 双引号直接嵌套会被HCL识别为字符串结束标记,触发字符格式错误
解决方案

提供两种经过验证的写法,任选一种即可:

方案1:使用单引号包裹的heredoc语法(推荐,无需逐字符转义)

通过heredoc + 单引号标记完全禁用HCL对块内内容的插值,所有命令原样传递给shell执行,格式更整洁:

provisioner "remote-exec" {
  inline = [
    <<-'EOT'
      VAR=$(cat contents.txt | grep '"token"')
      VAR="${VAR:11}"
      VAR="${VAR:0:-1}"
      # 后续可追加使用$VAR的业务命令
    EOT
  ]
}

说明:<<-'EOT'的前缀-会自动忽略行首的制表符,不需要额外调整缩进格式。

方案2:逐字符转义特殊字符

如果需要保持单条inline命令的写法,按以下规则转义即可:

  • 用$$代替$,告知HCL该字符需要保留给shell使用
  • 用\"转义嵌套的双引号,避免被识别为字符串结束
provisioner "remote-exec" {
  inline = [
    "VAR=$(cat contents.txt | grep '\"token\"')",
    "VAR=\"$${VAR:11}\"",
    "VAR=\"$${VAR:0:-1}\""
  ]
}

内容的提问来源于stack exchange,提问作者Pratik das baghel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 12:54:03