${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
最初に同じ行動を使ってみました。それから私はsed
wichと同じことを試しました。 :)
私は様々なエスケープスラッシュ、一重引用符、二重引用符を試しましたが、結果はありませんでした。
ここで何が起こっているのでしょうか?
答え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の組み込みメカニズムは機能しません。 これらの人々も同じ問題に遭遇しました。。
一般的な使用の場合は、指示に従ってください。ここ。