在 CentOS(以及一般 Linux)里,说 “env 怎样继承”,通常是指 环境变量(environment variables)在什么情况下会被子进程继承。下面按常见场景说明。
核心规则:
父进程的环境变量,会自动继承给子进程
例如:
export VAR=123
bash # 启动子 shell
echo $VAR # 输出 123
只要是 export 的变量,子进程(命令、脚本、shell)都能继承。
export NAME=centos
sh test.sh
test.sh 中可以读到 $NAME
❌ 没 export 的变量不会继承:
NAME=centos
sh test.sh
# test.sh 中 echo $NAME 为空
# parent.sh
export A=1
./child.sh
# child.sh
echo $A
✅ child.sh 能继承 A
systemd 不会继承 shell 的 env
[Service]
Environment=VAR=123
或
EnvironmentFile=/etc/sysconfig/myapp
systemctl import-environment VAR
systemctl restart myapp
cron 几乎不继承用户环境
* * * * * VAR=123 /opt/test.sh
或在脚本里自己 export
默认 sudo 会清空环境变量
sudo env
sudo -E command
或配置 /etc/sudoers
Defaults env_keep += "VAR_NAME"
su - # 不继承(模拟登录)
su # 继承当前环境
export PATH=$PATH:/usr/local/bin
env VAR=123 ./app
source ./env.sh
| 情况 | 是否继承 |
|---|---|
| export 变量 | ✅ |
| 普通变量 | ❌ |
| systemd | ❌(需配置) |
| cron | ❌ |
| sudo | ❌(默认) |
| source | ✅ |
如果你指的是 某个具体场景(比如 Python / Java / Docker / systemd / shell 脚本),可以告诉我,我可以给你更精确的示例。