在 Debian(以及所有类 Unix 系统)中,环境变量(environment variables)是可以继承给子进程的,但有一些规则和注意事项。
当你在 shell 中启动一个程序时:
export VAR=123
my_program
my_program 是 shell 的子进程PATH、HOME、VAR 等✅ 这是默认行为
VAR=123
my_program
VAR 只是 shell 的局部变量✅ 必须使用 export 才能进入环境
export TEST=hello
bash
echo $TEST
# hello
或者:
cat /proc/$PID/environ
前面已说明
env -i 启动env -i my_program
在 Debian 中:
setuidLD_LIBRARY_PATH、PATH)可能被清空或忽略[Service]
ExecStart=/opt/app/run.sh
exportEnvironment=VAR=123
或:
EnvironmentFile=/etc/default/myapp
cron 子进程环境非常干净
login shell
└─ bash (export A=1)
└─ python (继承 A)
└─ curl (继承 A)
✅ 环境沿进程树向下继承
❌ 子进程修改不会影响父进程
| 情况 | 是否继承 |
|---|---|
| export 变量 | ✅ |
| 普通 shell 变量 | ❌ |
| systemd service | ❌(需显式配置) |
| cron | ❌ |
| setuid 程序 | ⚠️ 部分被清除 |
| env -i | ❌ |
如果你指的是 Docker / systemd / shell script / 某个具体场景,可以告诉我,我可以给更精确的答案。