替换 var 占位符会产生不需要的新行

替换 var 占位符会产生不需要的新行

我希望用从文件(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首先使用并首先看到相同的行为。然后我尝试用sedwich 做同样的事情:)

我尝试了各种转义斜杠、单引号和双引号都没有结果。

这里发生了什么?

答案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 内置机制对我不起作用。 这些人遇到了同样的问题

对于正常使用情况,您可以按照说明进行操作这里

相关内容