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

使用Terragrunt调用Terraform时获取当前工作目录失败求助

解决Terragrunt/Terraform获取工作目录的问题

你的local-exec命令生成空文件,核心原因是对shell环境变量的使用有误,再加上Terragrunt的工作目录特性,下面给你几个针对性的解决方案:

1. 快速修复:直接执行pwd命令

你写的echo $pwd里,小写的$pwd不是标准shell环境变量——shell里存储当前工作目录的是大写的$PWD,而小写pwd是打印目录的命令,直接引用$pwd会被shell解析为空值。最简单的修复是直接调用pwd命令:

resource null_resource "pwd" {
  triggers = {
    always_run = uuid()
  }
  provisioner "local-exec" {
    command = "pwd >> somefile.txt"
  }
}

这样会直接输出当前shell的工作目录到文件。

2. 更可靠:用Terraform内置变量path.cwd

如果不想依赖shell环境,建议用Terraform原生的path.cwd变量,它会直接返回Terraform当前的工作目录,结果更稳定:

resource null_resource "pwd" {
  triggers = {
    always_run = uuid()
  }
  provisioner "local-exec" {
    command = "echo ${path.cwd} >> somefile.txt"
  }
}

这个变量不受shell差异影响,是Terraform官方推荐的路径获取方式。

3. 针对Terragrunt:获取它的根工作目录

如果你需要的是Terragrunt配置文件所在的目录(而不是它临时生成的Terraform执行目录),可以通过Terragrunt传递变量:
首先在terragrunt.hcl中添加输入变量:

inputs = {
  terragrunt_root_dir = get_terragrunt_dir()
}

然后在Terraform代码里定义并使用这个变量:

variable "terragrunt_root_dir" {
  type = string
}

resource null_resource "pwd" {
  triggers = {
    always_run = uuid()
  }
  provisioner "local-exec" {
    command = "echo ${var.terragrunt_root_dir} >> somefile.txt"
  }
}

这样就能拿到Terragrunt的根目录,而不是它临时执行Terraform的路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 16:57:30