【问题标题】:Using bash to parse .env file and inject it to command line使用 bash 解析 .env 文件并将其注入命令行
【发布时间】:2019-07-07 00:32:14
【问题描述】:

我正在使用 kubernetes 并尝试调用以下命令:
kubectl set env deployment/server A=a B=b ...etc 我的 env 变量位于 .env 文件中,每个值可以包含空格、非转义字符、cmets、空行等:

## Common variables
NODE_ENV=production


## Server variables
SERVER_PORT=8009
CORS_ORIGIN=https://www.example.io,http://www.example.io,http://localhost:3000
SESSION_SECRET=/qm%7HLw"pk(8@"pja#I9CbN#2Lg[%d>5{CDA_9g|ZvZmuZ$]=';EhA#g+C;1>&

我正在尝试解析 .env 文件,以便将其集成到命令中:

kubectl set env deployment/server $(do magic with .env file to extract the escaped variables)

试过grep -v '^#' .env | xargs,但它不适用于需要转义或引号的字符。我的 bash 能力现在不是最强的。知道如何解决这个问题吗?

【问题讨论】:

  • @prd 刚接触 kubernetes,没有找到很好的教程来解释如何编写 .yml 配置。货币通过 cli 和 kubectl 做所有事情。
  • 您可以使用 configmap 将环境加载到您的 pod

标签: bash unix kubernetes environment-variables kubectl


【解决方案1】:
cat .env | grep -v '^#\|^$' | xargs -0 echo | tr '\n' ' '

这会将所有内容打印在一行中:NODE_ENV=production SERVER_PORT=8009 CORS_ORIGIN=https://www.example.io,http://www.example.io,http://localhost:3000 SESSION_SECRET=/qm%7HLw"pk(8@"pja#I9CbN#2Lg[%d>5{CDA_9g|ZvZmuZ$]=';EhA#g+C;1>&

我不确定您是否需要保留 VAR= 或者您是否也想摆脱它(最后通过管道输入 sedawk 并用您需要的任何内容替换它)

【讨论】:

  • 谢谢,这是一个进步。我实际上需要转义值并用引号括起来,因为值包含斜杠和引号,这是大问题。知道如何处理吗?
  • | sed 's/=/="/g' | sed 's/ /" /g' 这将为您的所有值添加引号。但是您还需要查看您的值并使用反斜杠 \ ? 转义某些字符
  • 没错。知道怎么做吗?
  • 是的,您可以使用一个复杂的 sed 或只链接多个 sed 以保持可读性。首先为所有 $-chars 添加一个反斜杠,然后为所有 %-chars 添加一个反斜杠...将 char 更改为您需要的任何内容。使用反斜杠以防它也在 Regex 中用于转义它,否则 sed 会将其解释为 regex 标志。 sed 's/\$/\\$/g' | sed 's/\%/\\%/g' 如果这是你的意思,我会更新我的主要答案以使其更具可读性。
  • 谢谢,看来我可以继续了。
猜你喜欢
  • 2018-10-10
  • 2015-04-22
  • 2015-06-18
  • 1970-01-01
  • 2014-03-10
  • 1970-01-01
  • 2023-01-12
  • 1970-01-01
  • 2020-10-09
相关资源
最近更新 更多