envsubst
是 Linux 中用于替换文本中环境变量的工具,通常用于自动化脚本和模板文件。它会扫描输入中的环境变量,并将其替换为当前的环境变量值。
envsubst
的基本语法envsubst [OPTION] [SHELL-FORMAT]
OPTION
:可选参数,用于控制 envsubst
的行为。SHELL-FORMAT
:要替换的环境变量(通常以 $VARIABLE_NAME
的形式表示)。envsubst
默认会替换标准输入(stdin
)中的环境变量,但你也可以通过重定向来指定输入和输出。
envsubst
的常见用法envsubst
将文本中符合 $VARIABLE
格式的环境变量替换为当前环境变量的值。
示例: 假设有以下环境变量:
export NAME="John"
export AGE="30"
创建一个模板文件 template.txt
:
Hello, my name is $NAME. I am $AGE years old.
使用 envsubst
来替换文本中的环境变量:
envsubst < template.txt
输出:
Hello, my name is John. I am 30 years old.
你可以指定要替换的环境变量,而不是全部替换。通过在命令行中显式指定要替换的变量。
示例:
export NAME="John"
export AGE="30"
假设 template.txt
内容为:
Hello, my name is $NAME. I am $AGE years old. I live in $CITY.
你可以只替换 $NAME
,而保留其他变量不变:
envsubst '$NAME' < template.txt
输出:
Hello, my name is John. I am $AGE years old. I live in $CITY.
可以将 envsubst
的输出重定向到一个新的文件中。
示例:
envsubst < template.txt > result.txt
此操作会将替换后的内容保存到 result.txt
文件中。
envsubst
的选项SHELL-FORMAT
:指定要替换的环境变量列表,使用 $VAR
或 ${VAR}
格式。如果未指定,envsubst
会替换所有环境变量。-v
:显示版本信息。-h
:显示帮助信息。envsubst
常用于自动化脚本和配置文件生成中。假设你有一个 Bash 脚本,需要动态生成配置文件。
创建 config.template
文件:
DB_HOST=$DB_HOST
DB_USER=$DB_USER
DB_PASSWORD=$DB_PASSWORD
编写 Bash 脚本:
#!/bin/bash
export DB_HOST="localhost"
export DB_USER="admin"
export DB_PASSWORD="secret"
envsubst < config.template > config.conf
执行后,将生成 config.conf
文件:
DB_HOST=localhost
DB_USER=admin
DB_PASSWORD=secret
envsubst
也常用于容器环境中生成配置文件。假设有一个 Nginx 配置文件模板,需要动态配置服务器的主机名。
创建 nginx.template.conf
:
server {
listen 80;
server_name $HOST_NAME;
}
在 Docker 环境中,可以用以下命令生成实际的 Nginx 配置:
export HOST_NAME="example.com"
envsubst < nginx.template.conf > /etc/nginx/nginx.conf
生成的 /etc/nginx/nginx.conf
文件内容为:
server {
listen 80;
server_name example.com;
}
也常用于编写k8s的yaml文件,例如clusterconfig.yaml
内容:
---
apiVersion: eksctl.io/v1alpha5
kind: ClusterConfig
metadata:
name: eksworkshop-eksctl
region: ${AWS_REGION}
fargateProfiles:
- name: fargate-productcatalog
selectors:
- namespace: prodcatalog-ns
labels:
app: prodcatalog
执行envsubst < deployment/clusterconfig.yaml
:
可以将环境变量保存在一个文件中,并使用 source
来加载它,然后用 envsubst
进行替换。
步骤:
创建一个环境变量文件 env_vars.sh
:
export NAME="Alice"
export AGE="28"
使用 source
命令加载环境变量:
source env_vars.sh
使用 envsubst
替换模板中的变量:
envsubst < template.txt > result.txt
envsubst
是一个轻量级工具,主要用于将文本中的环境变量替换为其实际值,广泛应用于自动化脚本、配置文件生成等场景。