少し前に envsubst
コマンドの存在を知った.envsubst
コマンドを使うと,変数展開など,Shell で「テンプレートエンジン」のような仕組みを実現できる.例えば,設定ファイルを生成するときなどに使える.なぜ今まで知らなかったんだろう!と思うけど,今回は envsubst
の紹介記事を書きたいと思う.
準備
例えば Amazon Linux 2 など,環境によって,最初から envsubst
コマンドが使える場合もある.もしインストールする場合は gettext
パッケージに含まれているため,yum
などを使ってインストールする.
$ yum install -y gettext
$ which envsubst
/usr/bin/envsubst
Mac なら brew を使ってインストールできる.インストール後に brew link
を実行することを忘れずに!
$ brew install gettext $ brew link --force gettext $ which envsubst /usr/local/bin/envsubst
なお envsubst
コマンドの help を確認すると「環境変数の値を代入する」と記載されていた.
$ envsubst --help Usage: envsubst [OPTION] [SHELL-FORMAT] Substitutes the values of environment variables.
echo
と envsubst
を組み合わせる
まず,以下のように名前を ${NAME}
として環境変数にした文字列を作成し,echo
で標準出力をすると,そのまま出力される.
$ echo 'Hello ${NAME}' Hello ${NAME}
次に,export
で環境変数を設定して,標準出力を envsubst
に流すと,${NAME}
の部分が変数展開される.これは便利!
$ export NAME=kakakakakku $ echo 'Hello ${NAME}' | envsubst Hello kakakakakku
テンプレートファイルと envsubst
を組み合わせる
検証用のテンプレートファイル profile.yaml.template
を作成する.name
と blog
と github
を Key とし,Value に環境変数を指定したシンプルな YAML ファイルにする.
name: ${NAME} blog: ${BLOG_URL} github: ${GITHUB_URL}
検証用のテンプレートファイルを cat
で標準出力をすると,そのまま出力される.
$ cat profile.yaml.template name: ${NAME} blog: ${BLOG_URL} github: ${GITHUB_URL}
次に,先ほどと同様に export
で環境変数を設定して,検証用のテンプレートファイルを envsubst
に流すと,Value の部分が変数展開される.環境ごとに異なる設定ファイルを生成できるようになった.これは便利!
$ export NAME=kakakakakku $ export BLOG_URL=https://kakakakakku.hatenablog.com $ export GITHUB_URL=https://github.com/kakakakakku $ cat profile.yaml.template | envsubst name: kakakakakku blog: https://kakakakakku.hatenablog.com github: https://github.com/kakakakakku
なお,ファイルと組み合わせる場合は cat
を使わずに,直接流し込むこともできる.
$ envsubst < profile.yaml.template
name: kakakakakku
blog: https://kakakakakku.hatenablog.com
github: https://github.com/kakakakakku
まとめ
envsubst
コマンドを使うと,Shell で「テンプレートエンジン」のような仕組みを実現できる- 設定ファイルを生成するときなどに使えて便利!