【工具】Shell之Bash、Zsh配置文件的使用

Shell之Bash、Zsh配置文件的使用

问题:

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 实际会读取哪套配置。

相关推荐
wuyk5554 小时前
59.嵌入式C语言高级宏定义实战:多行宏、字符串化与符号拼接
c语言·开发语言·stm32·单片机·嵌入式硬件·物联网·51单片机
云泽8084 小时前
Visual Studio 2026 新手保姆级教程:环境搭建、界面优化与编译器配置详解
开发语言·c++·c·开发工具·visual studio
2zcode5 小时前
基于MATLAB深度学习的乳腺钼靶影像乳腺癌智能诊断系统设计与实现
开发语言·深度学习·matlab·乳腺癌
MoonBit月兔5 小时前
错过大赛报名?MoonBit 开源大赛- 8 月黑客松正式开启
开发语言·ai-native·moonbit
weixin_538601975 小时前
智能体测开Day31
开发语言·python
geovindu5 小时前
java: Facade Pattern
java·开发语言·后端·外观模式·结构型模式
listening7775 小时前
HarmonyOS 6.1 元服务深度优化:从“秒开”到“常驻”的极致体验
java·开发语言·spring
布朗克1685 小时前
Go 入门到精通-29-测试与基准
开发语言·后端·golang·测试与基准
格林威6 小时前
工业相机Chunk功能全解析:图像嵌入时间戳、编码器元数据(附堡盟C#代码)
开发语言·人工智能·数码相机·计算机视觉·c#·视觉检测·工业相机
小大宇7 小时前
Python 集成 Conda
开发语言·python·conda