首页 > 解决方案 > 用 sh 文件中的值替换字符串占位符

问题描述

我不得不说,在 Windows 环境 /Powershell 中我会立即完成,但由于我必须在 docker Linux 映像中执行这个 shell 脚本,所以我需要你的帮助。

我有一个 node.js env 文件,我在其中存储了我的环境变量,因此 nodejs 应用程序可以稍后使用它们。我设置了一些占位符,我需要用我从 docker 获得的事件 args 参数替换它们run command

.env 文件的内容是

NodePort={NodePort}
DBServer={DBServer}
DBDatabaseName={DBDatabaseName}
DBUser={DBUser}
DBPassword={DBPassword}
DBEncrypt= {DBEncrypt}
RFIDNodeUrlRoot={RFIDNodeUrlRoot}
RFIDStartMethod={RFIDStartMethod}
RFIDStopMethod={RFIDStopMethod}
RFIDGetTagsMethod={RFIDGetTagsMethod}

我不知道打开文件、替换环境变量中的值然后保存它的最佳方法是什么。

任何人都可以帮助我吗?谢谢

标签: dockerdockerfilesh

解决方案


您可以使用包envsubst的 which ist 部分gettext-base

看:

.env.temp

NodePort=${NodePort}   # notice the `$` before `{}`
DBServer=${DBServer}
..

假设您正在设置环境变量

docker run -e "NodePort=8080" -e "DBServer=foo"

在该容器内,您将不得不使用一些entrypoint.sh脚本来运行:

envsubst \$NodePort,$\DBServer,.. < .env.temp > .env

然后启动您的应用程序传递.env给您的 nodejs 应用程序。

作为替代方案,您也可以使用sedto edit .env,这可能很难理解。

subst_env() {
  eval val="\$$1"                  # expands environment variable to val
  sed -i "s%\$$1%${val}%g" $2      # using % as sed-delimiter to avoid escaping slashes in urls
}

subst_env 'ENV_DOCKER_DOMAIN' .env

推荐阅读