我希望用从文件(docker)加载的环境变量替换文件${var}
中的占位符。我自己选择的语法与 docker-compose 一致。nginx.conf
.env
${var}
- 内容
.env
文件:DOMAIN_NAME=sub.domain.net DB_USER=admin ...
例如,在这条线上进行sed
字符串替换让我头疼。
- 文字输入:
server_name ${DOMAIN_NAME};
- 命令:
source .env export DOMAIN_NAME sed -i "s/\${DOMAIN_NAME}/$DOMAIN_NAME/g" "$docker_root"/nginx/nginx.conf
- 期望的结果:
server_name sub.domain.net;
- 但我得到的是:
server_name sub.domain.net ;
更换之后发生什么甚至都不重要${var}
。如果我在占位符后面添加一个空格和一个单词,该单词也会出现在第二行。
我envsubst
首先使用并首先看到相同的行为。然后我尝试用sed
wich 做同样的事情:)
我尝试了各种转义斜杠、单引号和双引号都没有结果。
这里发生了什么?
答案1
当我在 Windows 上工作时,问题是文件中的 Windows 风格的 CRLF(回车、换行)行结尾。
为了回应 Steeldriver 指出的评论,
我使用 dos2unix 将文件从 CRLF 转换为 LF (linux & mac)。
apt install dos2unix
find . -type f -print0 | xargs -0 dos2unix
起点是用 docker .env 文件变量替换 NGINX 占位符。使用 envsubst 的 NGINX 内置机制对我不起作用。 这些人遇到了同样的问题。
对于正常使用情况,您可以按照说明进行操作这里。