【问题标题】:Why is my envsubst command just inserting blank strings?为什么我的 envsubst 命令只是插入空白字符串?
【发布时间】:2021-08-26 15:16:51
【问题描述】:

我正在尝试运行命令 envsubst < myfile 来替换环境变量,但不是替换为它们的值,而是替换为空白字符串。

这是我的示例命令(为了清楚起见,分成单独的行):

SIGNOFF="Goodbye"
&&
printf "\nOkay, \$SIGNOFF has been set to \"$SIGNOFF\"\n\nOriginal contents:\n\n"
&&
cat test.conf
&&
printf "\n\nContents after envsubst < test.conf\n\n"
&&
envsubst < test.conf | cat
&&
printf "\n\n"

这是我的结果:

$ SIGNOFF="Goodbye" && printf "\nOkay, \$SIGNOFF has been set to \"$SIGNOFF\"\n\nOriginal contents:\n\n" && cat test.conf && printf "\n\nContents after envsubst < test.conf\n\n" && envsubst < test.conf | cat && printf "\n\n"

Okay, $SIGNOFF has been set to "Goodbye"

Original contents:

Hello world, let's change the variable in the quotes below to say Goodbye!
"$SIGNOFF" (it certainly shouldn't just be blank!)

Contents after envsubst < test.conf

Hello world, let's change the variable in the quotes below to say Goodbye!
"" (it certainly shouldn't just be blank!)

$ 

我显然在做一些明显的错误,我只是愚蠢地怀疑这是其中一件如此明显的事情,以至于我必须过于复杂自己的谷歌搜索来试图找到答案????

【问题讨论】:

  • | cat 那是一只没用的猫。
  • 呃……是吗?我的真实世界代码正在执行&gt; otherfile,所以我只是想我必须将它通过管道传递给 cat =D 嗯,我现在知道了 :)

标签: linux bash unix envsubst


【解决方案1】:

该变量未导出,因此对任何命令都不可见。导出它。

SIGNOFF="Goodbye"
export SIGNOFF
envsubst < file

【讨论】:

  • 好极了,必须是那样的明显的东西,不是吗! =D 好吧,所以我最好考虑一下,因为我的真实环境在一个 docker 内部,它从 .env 文件中引入了这个变量。我想知道同一个 .env 文件是否也可以将 export 关键字也卡在那里,试试看吧:)
  • 顺便谢谢你这么快的回复,我会选择当它允许我的时候作为答案=D
  • 你不需要把export放在你的.env中;使用set -a 在采购之前启用自动导出,并在不再需要时使用set +a 将其关闭(环境变量使用相同的有限空间池,也用于命令行参数,所以你不要想要导出不需要在环境中的 shell 变量,否则您将不必要地减少允许的最大命令行长度)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-03
  • 2014-11-27
  • 1970-01-01
  • 2017-03-06
  • 2015-11-20
  • 1970-01-01
相关资源
最近更新 更多