在 CentOS(以及一般的 Linux)里,环境变量(environment variables)是可以继承的,但有一些前提和细节需要注意。
在 Linux 中:
例如:
export VAR=hello
bash # 启动子 shell
echo $VAR # 输出 hello
这就是“env 可以继承”。
export A=1
sh test.sh
test.sh 里能读到 A
⚠️ 如果没 export:
A=1
sh test.sh
子进程读不到
在 CentOS 7+(使用 systemd):
❌ 普通 shell 的 env 不会自动传给 systemd 服务
✅ 需要在 service 文件里单独配置
例如:
[Service]
Environment=VAR=hello
或:
EnvironmentFile=/etc/sysconfig/myapp
ssh user@host 'echo $VAR'
默认 不会继承本地 env
解决方式:
ssh user@host "VAR=$VAR; echo \$VAR"
默认 sudo 会过滤部分环境变量
查看:
sudo env
允许继承:
sudo -E command
或修改 /etc/sudoers:
Defaults env_keep += "VAR_NAME"
cron 几乎不继承用户 shell 环境
必须在 crontab 里写:
VAR=hello
* * * * * /path/script.sh
env
printenv
cat /proc/<pid>/environ
✅ CentOS 中 env 是可以继承的
❗ 但只限于:
export如果你有具体场景(比如:systemd、shell 脚本、Docker、sudo),我可以给你更准确的例子。