在 Debian(以及大多数 Linux)里常说的 env 不生效,一般分几种情况。你先对照看看是哪一种,我再给对应解决办法。
/etc/environment 但不生效原因:
/etc/environment 不会自动 source,只对登录后新启动的 session 生效,而且不支持 shell 语法(不能写 export)。
✅ 正确做法:
sudo vim /etc/environment
内容示例(不要写 export):
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
JAVA_HOME="/usr/lib/jvm/java-11-openjdk-amd64"
然后:
# 重新登录(注销或 SSH 重连)
exit
ssh user@host
或临时生效:
source /etc/environment
.bashrc / .profile 里但不生效.bashrc 不会被执行✅ 解决:
source ~/.bashrc
~/.profile
(仅对 login shell 生效)
su 而不是 su -su
不会加载环境变量
✅ 正确:
su -
或
sudo -i
如果你是在 systemd 服务里读不到环境变量:
❌ 错误:
[Service]
Environment=MY_VAR=1
但程序还是读不到?
✅ 正确方式:
[Service]
Environment="JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64"
[Service]
EnvironmentFile=/etc/default/myapp
然后:
sudo systemctl daemon-reload
sudo systemctl restart myapp
如果是容器:
docker run -e MY_VAR=1 image
或在 Dockerfile:
ENV MY_VAR=1
echo $VAR_NAME
env | grep VAR_NAME
如果为空,说明:
如果你只是想全局生效:
sudo vim /etc/profile.d/myenv.sh
内容:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
export PATH=$JAVA_HOME/bin:$PATH
然后:
chmod +x /etc/profile.d/myenv.sh
source /etc/profile
如果你能告诉我:
我可以直接给你精确命令。