在 CentOS 上调试 env(环境变量)问题,通常可以从查看、定位加载时机、逐项排查三个层面来做。下面按实用场景说明。
env
或
printenv
echo $PATH
printenv PATH
declare -p PATH
可以看到变量是否为环境变量(export)。
CentOS 中 env 通常在以下文件加载(顺序很重要):
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc
~/.bashrc
grep -R "export PATH" /etc/profile /etc/profile.d/ ~/.bash_profile ~/.bashrc
bash -x 看加载过程bash -x -l -c 'env' 2>debug.log
或直接:
bash -x ~/.bash_profile
可以看到每一步执行了什么、设置了什么变量
#!/bin/bash
set -x
env
或只在需要处:
echo "PATH=$PATH"
env > env_ok.txt
# 出问题环境
env > env_bad.txt
diff env_ok.txt env_bad.txt
* * * * * env > /tmp/cron_env.txt
systemctl show your.service | grep Environment
在 service 里显式指定:
[Service]
Environment=PATH=/usr/local/bin:/usr/bin:/bin
export DEBUG=1
echo 'export DEBUG=1' >> ~/.bash_profile
source ~/.bash_profile
| 问题 | 排查点 |
|---|---|
| 命令找不到 | echo $PATH |
| sudo 后变量丢失 | sudo -E 或 /etc/sudoers |
| 脚本里变量为空 | 是否 export |
| SSH 登录正常,cron 不行 | 环境文件未加载 |
| Docker / systemd 不一致 | 显式 Environment |
如果你能具体说一下:
我可以给你更精准的调试步骤。