1. 为什么 .profile 失效了?
Bash 的加载逻辑非常“死板”:当它作为 Login Shell 启动时,会按照以下优先级搜索配置文件:
1. ~/.bash_profile (优先级最高)
2. ~/.bash_login
3. ~/.profile (最低)
关键点: 只要 Bash 找到了 .bash_profile,它就会像完成了任务一样,直接忽略掉同目录下的 .profile。
2. 现在的状况
你的目录下同时存在 .bash_profile 和 .profile:
* 你把修改 PS1 的逻辑写在了 .bashrc 里。
* .profile 负责调用 .bashrc。
* 但是,因为有了 .bash_profile,系统根本没去读 .profile,导致调用链断了,.bashrc 成了“孤岛”。
3. 如何彻底解决?
你有两个选择,建议用 方案 A,因为这是最标准的做法。
方案 A:在 .bash_profile 中调用 .bashrc(最推荐)
检查一下你的 .bash_profile 内容,它现在可能几乎是空的。把以下代码加进去:
# 如果存在 .bashrc,就加载它
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
这样当你登录时,.bash_profile 就会亲手把 .bashrc 拉起来。
方案 B:删掉(或改名) .bash_profile
如果你不需要 .bash_profile 里的特殊设置,直接干掉它:
mv ~/.bash_profile ~/.bash_profile.bak
删掉后,Bash 找不到优先级最高的文件,就会乖乖去读你的 .profile 了,由于 .profile 已经配置了调用 .bashrc,一切都会恢复正常。
4. 验证效果
修改完成后,你不需要重启机器,只需要模拟一次登录即可:
# 方法 1:直接在当前 shell 加载(仅限当前窗口)
source ~/.bashrc
# 方法 2:模拟完整登录过程(最稳妥的验证方式)
su - root
