我不得不说,在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