【问题标题】:How to output bash multiline EVAL statement to temp file [duplicate]如何将bash多行EVAL语句输出到临时文件[重复]
【发布时间】:2019-07-07 19:50:03
【问题描述】:

尝试变量替换模板化 yaml 文件。

我正在使用 eval 获取环境 shell 变量并动态替换文件中的内容。我不知道如何获取这个输出并保存到文件中。

我只想获取评估的输出并保存到文件中。

eval "cat <<EOF
$(<${baseFileName})
EOF"

示例 test.yaml

---
value: ${PORT}

Bash 环境变量:

PORT=8888

输出 temp.test.yaml

---
value: 8888

现在代码只会将评估后的文本打印到控制台。

我试过了。

eval "cat <<EOF
$(<${baseFileName})
EOF" > $newBaseFileName

但没有快乐。甚至没有创建文件。

我不使用 sed 的原因是因为该文件可能有无限的变量减速,并且我想替换任何与定义的 bash 变量或环境变量匹配的值。这是模板引擎的一部分。在我的一生中,我不记得我以前是如何使用纯 bash 做到的。

【问题讨论】:

  • 请提供更多细节。首先,评估的输出是什么样的?见minimal reproducible example
  • @wjandrea 添加,因为你不明白我在说什么。请参阅上下文添加。
  • 您的示例代码实际上对我有用。请发minimal reproducible example
  • PORT="$PORT" envsubst &lt; test.yamlexport "$PORT" 在调用 envsubst 之前。如果不清楚如何让它完全按照您的意愿行事,请以此为起点提出一个新问题。
  • 你收到bash: syntax error near unexpected token 'newline' 了吗?然后检查你的变量newBaseFileName,也许先写信给/tmp/envtest.out

标签: linux bash command-line


【解决方案1】:

这对我不起作用,但我所做的是这个

renderTemplate() {

eval "cat <<EOF
$(<${1})
EOF"

}

baseFileName=$(basename $fileName)
templateOutput=`renderTemplate ${baseFileName}`
echo "${templateOutput}"

无论如何我都将它用作临时文件,所以我要做的是保存到变量,然后将该变量泵入命令以将模板作为文件应用。这样,它只会存储在内存中。这是另一个 cli 的中间件 cli,用于在应用之前将变量替换添加到内存中的 Web 托管文件。

感谢您的帮助。

【讨论】:

  • 这不是答案。将所有相关信息放入您的问题中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-14
  • 2018-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多