在 Debian(以及大多数 Linux)里,“环境变量生效”取决于你是在哪里设置的、给谁用、什么时候用。下面按常见场景给你一个清晰速查表。
export VAR=value
✅ 立即生效
❌ 关闭终端后失效
✅ 只对当前 shell 及其子进程有效
示例:
export PATH=$PATH:/usr/local/go/bin
~/.bashrc(最常用)nano ~/.bashrc
添加:
export VAR=value
生效方式(任选其一):
source ~/.bashrc
# 或
. ~/.bashrc
✅ 登录后自动生效
✅ 适合交互式 shell
⚠️ cron / systemd 不会读取
~/.profile 或 ~/.bash_profilenano ~/.profile
添加:
export VAR=value
生效:
source ~/.profile
✅ 登录 shell 会读取
✅ 比 .bashrc 更适合“环境变量”
⚠️ 图形界面 / systemd 不一定读取
/etc/environment(推荐)sudo nano /etc/environment
格式(不能写 export):
VAR=value
生效方式:
✅ 对所有用户生效
✅ systemd / 登录管理器会读取
❌ 不支持变量扩展($PATH 不行)
/etc/profile 或 /etc/profile.d/*.shsudo nano /etc/profile.d/myenv.sh
内容:
export VAR=value
生效:
source /etc/profile
✅ 所有用户
✅ 登录 shell
❌ 非登录 shell 可能不生效
systemd / cron 也能识别环境变量(非常重要)sudo nano /etc/systemd/system/myservice.service
[Service]
Environment="VAR=value"
或:
EnvironmentFile=/etc/default/myservice
然后:
sudo systemctl daemon-reload
sudo systemctl restart myservice
cron 不会读取 bashrc / profile
方式一:在 crontab 里加
VAR=value
* * * * * /path/script.sh
方式二:脚本里 source
#!/bin/bash
source /etc/profile
echo $VAR
env | grep VAR
| 情况 | 原因 |
|---|---|
| source 了但还是没生效 | 在子 shell / sudo / cron 里 |
| sudo 后变量消失 | sudo 会重置环境 |
| systemd 读不到 | 没写在 Environment |
写 export 到 /etc/environment |
❌ 错误写法 |
| 需求 | 建议 |
|---|---|
| 临时测试 | export VAR=value |
| 当前用户 | ~/.bashrc / ~/.profile |
| 所有用户 | /etc/environment |
| systemd 服务 | Environment= |
| cron | crontab 里定义 |
如果你愿意,可以告诉我:
我可以直接给你最合适的一种写法。