将字符串占位符替换为sh文件中的值



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

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

env文件的内容是

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

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

有人能帮我吗?感谢

您可以使用envsubst,它是gettext-base包的一部分

参见:

  • https://stackoverflow.com/a/14157575/2087704
  • https://unix.stackexchange.com/a/294400/193945

.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应用程序。

另外,您也可以使用sed来编辑.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

最新更新