在 CentOS(以及大多数 Linux 发行版)里,env 本身不是一个“配置文件”,而是一个命令,用来显示或临时设置环境变量。很多人误以为“写了 env 就能生效”,其实常见的问题都出在使用方式或加载时机上。
下面按最常见原因给你梳理一下。
env 当成了“配置文件”❌ 错误理解:
# 以为写在这里就能全局生效
env PATH=/usr/local/bin:$PATH
✅ 正确理解:
env 是命令例如:
env VAR=1 bash
只在这个 bash 里有效。
如果你改的是这些文件:
/etc/profile/etc/bashrc~/.bash_profile~/.bashrc但没有重新登录或 source,是不会生效的。
✅ 解决:
source ~/.bashrc
# 或
source /etc/profile
或重新打开终端 / 重新登录。
这是 CentOS 上最常见也最容易踩坑的地方。
cron 不会加载 .bashrc、.profile
❌ 错误:
* * * * * my_script.sh
✅ 正确:
* * * * * . /etc/profile; /path/my_script.sh
或在脚本里显式 export。
systemd 不会读 bashrc
✅ 正确方式:
[Service]
Environment=JAVA_HOME=/usr/java
EnvironmentFile=/etc/sysconfig/myapp
或:
systemctl edit myapp
env -i 把环境清空了env -i bash
这会清空所有环境变量,只保留你显式指定的。
如果你发现“什么变量都没了”,多半是这个原因。
❌ 错误:
PATH=/usr/local/bin:$PATH
✅ 正确:
export PATH=/usr/local/bin:$PATH
否则只对当前 shell 有效,子进程拿不到。
CentOS 默认是 bash,但有些场景是 sh:
.bashrc 不会被执行。
✅ 检查:
echo $SHELL
你可以对照一下:
env 当成配置文件了?source 或重新登录?export 了?如果你愿意,可以直接把你的操作命令 + 使用场景(终端 / 脚本 / cron / systemd)发出来,我可以精准告诉你为什么没生效、该怎么改。