var 자리 표시자를 바꾸면 원하지 않는 새 줄이 생성됩니다.

var 자리 표시자를 바꾸면 원하지 않는 새 줄이 생성됩니다.

${var}파일 의 자리 표시자를 파일(docker)에서 로드된 환경 변수로 바꾸고 싶습니다. 내가 선택한 구문은 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

시작점은 NGINX 자리 표시자를 docker .env 파일 변수로 바꾸는 것입니다. envsubst를 사용하는 NGINX의 내장 메커니즘이 작동하지 않습니다. 이 사람들도 같은 문제를 겪었어요.

일반적인 사용의 경우 지침을 따르십시오.여기.

관련 정보