温馨提示×

centos env怎样继承

小樊
44
2026-09-21 12:46:52
栏目: 智能运维

在 CentOS(以及一般 Linux)里,说 “env 怎样继承”,通常是指 环境变量(environment variables)在什么情况下会被子进程继承。下面按常见场景说明。


一、环境变量的基本继承规则

核心规则:

父进程的环境变量,会自动继承给子进程

例如:

export VAR=123
bash        # 启动子 shell
echo $VAR   # 输出 123

只要是 export 的变量,子进程(命令、脚本、shell)都能继承。


二、不同场景下的继承情况

1️⃣ Shell 中继承(最常用)

export NAME=centos
sh test.sh

test.sh 中可以读到 $NAME

❌ 没 export 的变量不会继承:

NAME=centos
sh test.sh
# test.sh 中 echo $NAME 为空

2️⃣ 脚本中继承

# parent.sh
export A=1
./child.sh
# child.sh
echo $A

✅ child.sh 能继承 A


3️⃣ systemd 服务(CentOS 7+ 重点)

systemd 不会继承 shell 的 env

✅ 正确方式一:在 service 文件里写

[Service]
Environment=VAR=123

或

EnvironmentFile=/etc/sysconfig/myapp

✅ 方式二:手动传递

systemctl import-environment VAR
systemctl restart myapp

4️⃣ cron 任务(很容易踩坑)

cron 几乎不继承用户环境

* * * * * VAR=123 /opt/test.sh

或在脚本里自己 export


5️⃣ sudo 下的继承

默认 sudo 会清空环境变量

查看:

sudo env

允许继承:

sudo -E command

或配置 /etc/sudoers

Defaults env_keep += "VAR_NAME"

6️⃣ su 下的继承

su -    # 不继承(模拟登录)
su      # 继承当前环境

三、如何“主动让 env 继承”

方法 1:export(最常用)

export PATH=$PATH:/usr/local/bin

方法 2:env 命令

env VAR=123 ./app

方法 3:source(不创建子进程)

source ./env.sh

四、常见误区总结

情况 是否继承
export 变量 ✅
普通变量 ❌
systemd ❌(需配置)
cron ❌
sudo ❌(默认)
source ✅

如果你指的是 某个具体场景(比如 Python / Java / Docker / systemd / shell 脚本),可以告诉我,我可以给你更精确的示例。

0 踩