在 Debian(以及一般 Linux)里,“环境(env / 环境变量)如何继承”通常涉及 进程树、shell 类型、以及配置文件加载顺序。下面按常见场景说明。
核心原则:
子进程自动继承父进程的环境变量
login shell
└─ bash
└─ python
└─ child process
只要变量在父进程中 export 了,子进程就能看到。
/etc/profile
~/.bash_profile
~/.bash_login
~/.profile
/etc/bash.bashrc
~/.bashrc
bash script.sh.bashrcexportexport MY_VAR=123
❌ 错误(不会继承):
MY_VAR=123
/etc/profile
/etc/environment
/etc/bash.bashrc
~/.profile
~/.bashrc
⚠️ 注意:
/etc/environment不是 shell 脚本,不能写export- 只写:
MY_VAR=123
systemctl --user edit xxx.service
或:
~/.config/environment.d/env.conf
MY_VAR=123
/etc/systemd/system.conf
或:
/etc/systemd/system/xxx.service.d/env.conf
[Service]
Environment=MY_VAR=123
⚠️ systemd 不会自动继承 shell 的 env
sudo 不会继承全部 env
sudo -E command
或允许特定变量:
/etc/sudoers
Defaults env_keep += "MY_VAR"
cron 几乎没有环境
* * * * * export MY_VAR=123; /path/script.sh
或:
0 * * * * . $HOME/.profile; /path/script.sh
ENV MY_VAR=123
或在运行:
docker run -e MY_VAR=123 image
env
printenv MY_VAR
bash -x script.sh
Debian 中 env 的继承 = 父进程 export + 正确的 shell / systemd 配置
如果你能说明:
我可以给你精确配置示例。