在 Debian(以及大多数 Linux)里,env 失效通常不是 env 命令本身坏了,而是环境变量的来源/作用域/配置方式有问题。下面按常见原因给你系统梳理一下。
例如:
export MYVAR=123
这只在当前 shell 会话有效。
✅ 正确做法(持久化):
~/.bashrc
~/.profile
~/.bash_profile
/etc/environment
/etc/profile
/etc/profile.d/*.sh
⚠️ 注意:
.bashrcDebian 默认可能是 sh(dash),而 export 写在 .bashrc 里:
sh
echo $MYVAR # 空
✅ 检查当前 shell:
echo $0
ps -p $$
✅ 建议:
.profile/etc/environmentDebian 10+ 默认用 systemd。
❌ 这样没用:
export MYVAR=1
systemctl restart myapp
✅ 正确方式:
systemctl edit myapp
写入:
[Service]
Environment=MYVAR=1
或:
/etc/environment
cron 几乎没有任何环境
❌ 错误:
* * * * * python app.py
✅ 正确:
* * * * * export MYVAR=1; /usr/bin/python /path/app.py
或
* * * * * . /etc/environment; python app.py
sudo mycommand
默认会 重置环境
✅ 解决:
sudo -E mycommand
或
visudo
添加:
Defaults env_keep += "MYVAR"
ENV MYVAR=1
docker run -e MYVAR=1
echo $MYVAR
env | grep MYVAR
which env
cat /etc/environment
systemctl show-environment
我可以一步一步帮你查。