Linux不原生支持.env文件加载,需通过set -a/source组合、dotenv工具或env命令等方式手动注入环境变量,且须注意安全隔离与格式规范。

Linux 系统本身不原生支持 .env 文件加载,.env 是一种约定俗成的配置文件格式,需借助外部工具或手动方式将其内容注入环境变量。它不是操作系统层面的功能,而是开发流程中为简化多环境配置引入的实践方案。
.env 文件怎么写才有效
.env 是纯文本键值对文件,每行一个变量,格式简单:
DB_HOST=localhost DB_PORT=5432 API_KEY=sk_live_abc123 DEBUG=true
注意:
- 键名通常全大写,用下划线分隔(如
REDIS_URL) - 值两侧的空格会被保留,建议避免开头/结尾空格;若值含空格或特殊字符,可用单引号或双引号包裹:
MESSAGE="Hello World" - 支持
#开头的注释行 - 不支持嵌套、数组或变量引用(如
$DB_HOST不会自动展开)
怎么把 .env 里的变量真正加载进当前 Shell
Linux 的 source 命令不能直接读取 .env(因为 .env 不是合法的 Shell 脚本),需配合转换工具或简单脚本:
✅ 推荐方式:用 set -a + source(适用于简单场景)
先创建一个可执行的临时脚本,比如 load-env.sh:
#!/bin/bash set -a source .env set +a
然后运行:
source load-env.sh
或者一行搞定(推荐):
set -a; source .env; set +a
⚠️ 注意:set -a 会让后续定义的所有变量自动 export,set +a 关闭该行为,避免污染。
❌ 直接 source .env 会失败——Shell 解析时会把 DB_HOST=localhost 当作命令执行,报错 command not found。
更可靠的方式:用专用工具加载
常见语言生态提供了成熟库,例如:
-
Python:用
python-dotenvpip install python-dotenv
在代码中:
from dotenv import load_dotenv load_dotenv() # 自动加载项目根目录下的 .env
-
Node.js:用
dotenv包npm install dotenv
在入口文件顶部:
require('dotenv').config(); -
通用命令行工具:
dotenv-cli(需全局安装)npm install -g dotenv-cli dotenv -- node app.js
启动程序时临时注入 .env 变量(无需修改 Shell)
这是最安全、最隔离的做法,尤其适合部署脚本:
env $(cat .env | xargs) node server.js
但注意:xargs 对带空格或引号的值处理不稳健。更健壮的替代是使用 set -o allexport 配合 eval(仅限可信 .env):
set -o allexport; source <p>或直接用 <code>env</code> 命令逐条传入(适合少量变量):</p><pre class="brush:bash;toolbar:false;">env DB_HOST=localhost DB_PORT=5432 node server.js
安全提醒:别把 .env 提交到代码仓库
- 把
.env加入.gitignore - 生产环境不要依赖本地
.env,应由运维通过安全方式注入(如 systemd service 文件中的EnvironmentFile=或容器编排平台的 secret 挂载) -
.env中绝不能出现真实密钥、数据库密码等敏感信息(除非严格限定权限且不提交)
不复杂但容易忽略











