docker で環境を作っていて docker compose build 時に設定ファイルに環境変数から取得した値を自動で設定したかった。ファイルの変更は sed
コマンドを使えば良さそうだったので置換の正規表現に環境変数を展開して置換できれば良さそうです。
変数を使う場合は正規表現を "
(ダブルコーテーション) で囲う必要がある
"
(ダブルコーテーション) は変数展開がされるが、'
(シングルコーテーション) だと変数名そのものが正規表現に埋め込まれれしまう。
$ THEME_NAME=soleil $ echo '/path/to/theme/' | sed -e "s/\/path\/to\/theme\//\/path\/to\/$THEME_NAME\//g" /path/to/soleil/ # シングルコーテーションだと変数名のまま置換されてしまう $ echo '/path/to/theme/' | sed -e 's/\/path\/to\/theme\//\/path\/to\/$THEME_NAME\//g' /path/to/$THEME_NAME/
ファイル内の置換
ファイル内の置換を行う場合も同じ
.env
THEME=/path/to/your theme/
変数 docker-compose.yml
services: app: environment: THEME_NAME: soleil command: sh init.sh
コマンド init.sh
sed -i -e "s/\/path\/to\/your theme\//\/path\/to\/$THEME_NAME\//g" .env
👇 実行後
.env
THEME=/path/to/soleil/
₍ ᐢ. ̫ .ᐢ ₎👌 できた
[参考]
アイカツ…みて…