我正尝试在一个文件中写入一个包含它自己的EOF块的块。这在bash中是可行的吗?
cat > terragrunt.hcl <<'EOF'
# Automatically generated from script $(basename $0)
# Generate the AWS provider block
generate "provider" {
path = "provider.tf"
if_exists = "overwrite_terragrunt"
contents = <<EOF
# Terragrunt root config
provider "aws" {
# Only these AWS Account IDs may be operated on by this template
allowed_account_ids = ["${local.account_id}"]
region = "${local.infra_region}"
version = "${local.customer_vars.locals.aws_provider_version}"
}
EOF
}
# Automatically generated from script $(basename $0)
EOF正如预期的那样,它失败了:
❯ ./example.sh
./example.sh: line 17: syntax error near unexpected token `}'
./example.sh: line 17: `}'处理它的最佳解决方案是什么?
发布于 2020-08-26 17:40:11
您所称的"EOF块“实际上被称为"Here Document" (通常缩写为"heredoc"),而字符串"EOF”实际上可以是您喜欢的任何“单词”。
heredoc包含所有内容,直到它匹配的分隔符为止,所以嵌套两个heredocs只需要选择两个不同的分隔符:
cat > terragrunt.hcl <<'ENDTERRAGRUNT'
# Automatically generated from script $(basename $0)
# Generate the AWS provider block
generate "provider" {
path = "provider.tf"
if_exists = "overwrite_terragrunt"
contents = <<ENDROOTCONFIG
# Terragrunt root config
provider "aws" {
# Only these AWS Account IDs may be operated on by this template
allowed_account_ids = ["${local.account_id}"]
region = "${local.infra_region}"
version = "${local.customer_vars.locals.aws_provider_version}"
}
ENDROOTCONFIG
}
# Automatically generated from script $(basename $0)
ENDTERRAGRUNThttps://stackoverflow.com/questions/63594719
复制相似问题