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}。プレースホルダの後にスペースと単語を追加すると、その単語は2行目にも表示されます。

私は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の組み込みメカニズムは機能しません。 これらの人々も同じ問題に遭遇しました。

一般的な使用の場合は、指示に従ってください。ここ

おすすめ記事