envsubst
というコマンドを知った。テキストファイルに環境変数を埋め込んでくれるツール。
置換前
// $ cat config.json
{
"TargetCapacity": 1,
"Type": "request",
"TagSpecifications": [
{
"ResourceType": "spot-fleet-request",
"Tags": [
{
"Key": "Name",
"Value": "$EC2_INSTANCE_NAME"
}
]
}
],
// ...
}
環境変数を設定し、テキストを envsubst に渡すと置換される。
// $ export EC2_INSTANCE_NAME=my-instance
// $ cat config.json | envsubst
{
"TargetCapacity": 1,
"Type": "request",
"TagSpecifications": [
{
"ResourceType": "spot-fleet-request",
"Tags": [
{
"Key": "Name",
"Value": "my-instance"
}
]
}
],
// ...
}
GNU gettext というパッケージに含まれており、割と多くのディストリで標準で使えるようだ。
以前は sed で置換するとか、 JSON ファイルなら jq でセットするなどしていたが、単純な処理ならこちらの方が簡単だ。