Shell之Bash、Zsh配置文件的使用
- 问题:
- 答案:
-
- [一、先理解什么是 Shell](#一、先理解什么是 Shell)
- [二、什么是 Bash?](#二、什么是 Bash?)
- [三、什么是 Zsh?](#三、什么是 Zsh?)
- [四、为什么有的人改 .bash_profile 不生效?](#四、为什么有的人改 .bash_profile 不生效?)
- [五、Zsh 会读取什么?](#五、Zsh 会读取什么?)
- 六、如何判断自己该改哪个文件?
- 七、为什么有时两个文件都存在?
- [八、能不能让 zsh 读取 bash_profile?](#八、能不能让 zsh 读取 bash_profile?)
- 九、实际开发中怎么做?
问题:
Java、Maven环境变量可能配置在
~/.bash_profile
~/.zshrc
它们两个有什么关系?
我发现我新配的Maven环境变量和旧的配置的位置不一致,同时存在。


答案:
很多人配置 Java、Maven 环境变量时都会遇到这两个文件:
text
~/.bash_profile
~/.zshrc
它们的关系,本质上是:
它们属于不同 Shell 的配置文件。
一、先理解什么是 Shell
当你打开终端:
bash
java -version
mvn -version
ls
pwd
实际上不是操作系统直接执行这些命令。
而是:
text
你
↓
Shell
↓
操作系统
Shell 就是:
命令解释器(Command Interpreter)
负责:
- 接收你的命令
- 解析命令
- 执行命令
常见 Shell:
| Shell | 配置文件 |
|---|---|
| Bash | ~/.bash_profile |
| Zsh | ~/.zshrc |
| Fish | ~/.config/fish/config.fish |
二、什么是 Bash?
Bash 全称:
text
Bourne Again Shell
很多年里:
text
Linux
macOS
默认都是 Bash。
因此以前教程常写:
bash
vim ~/.bash_profile
配置:
bash
export JAVA_HOME=...
export PATH=...
三、什么是 Zsh?
Zsh 全称:
text
Z Shell
功能比 Bash 更丰富:
- 自动补全更强
- 主题更丰富
- 插件更多
从 macOS Catalina(10.15)开始:
text
默认Shell
Bash
↓
Zsh
因此新 Mac 上:
bash
echo $SHELL
通常输出:
text
/bin/zsh
四、为什么有的人改 .bash_profile 不生效?
因为:
text
你使用的是 Zsh
例如:
bash
echo $SHELL
输出:
text
/bin/zsh
这时:
bash
vim ~/.bash_profile
虽然改了,
但是:
text
Zsh根本不会读取它
所以:
bash
java -version
可能还是旧配置。
五、Zsh 会读取什么?
通常:
text
~/.zshrc
例如:
bash
export JAVA_HOME=...
export MAVEN_HOME=...
然后:
bash
source ~/.zshrc
立即生效。
六、如何判断自己该改哪个文件?
查看:
bash
echo $SHELL
情况1
输出:
text
/bin/bash
说明:
text
使用 Bash
配置:
bash
~/.bash_profile
情况2
输出:
text
/bin/zsh
说明:
text
使用 Zsh
配置:
bash
~/.zshrc
七、为什么有时两个文件都存在?
因为很多人的 Mac 经历过升级:
text
旧Mac
↓
默认 Bash
↓
配置 ~/.bash_profile
系统升级
↓
默认 Zsh
↓
配置 ~/.zshrc
于是:
text
~/.bash_profile
~/.zshrc
两个文件都存在。
八、能不能让 zsh 读取 bash_profile?
可以。
在:
bash
~/.zshrc
中写:
bash
source ~/.bash_profile
意思:
text
启动zsh
↓
顺便执行bash_profile
这样:
bash
export JAVA_HOME=...
export MAVEN_HOME=...
只需要维护一份。
九、实际开发中怎么做?
现在(2026年)绝大多数 Mac:
bash
echo $SHELL
都会看到:
text
/bin/zsh
因此通常直接配置:
bash
~/.zshrc
例如:
bash
export JAVA_HOME=$(/usr/libexec/java_home -v 17)
export MAVEN_HOME=/Users/xxx/apache-maven-3.9.11
export PATH=$JAVA_HOME/bin:$MAVEN_HOME/bin:$PATH
然后:
bash
source ~/.zshrc
即可。
你可以先执行
bash
echo $SHELL
把输出结果发给我,我可以告诉你当前应该修改 ~/.bash_profile 还是 ~/.zshrc,以及 IDEA、Maven、Java 实际会读取哪套配置。