彻底搞懂mac中profile和.bash_profile和.zshrc之间的关系及go环境配置

部署运行你感兴趣的模型镜像

.bash_profile、.bashrc、.zshrc、/etc/profile 这些文件,都是Shell 启动时加载的环境配置文件,但是它们有不同的作用场景。

1. 核心概念

文件作用场景适用
/etc/profile全局环境变量配置(系统级)所有用户登录shell时所有用户
~/.bash_profile用户级登录Shell配置bash登录时加载当前用户
~/.bashrc交互式bash配置bash交互shell、子shell当前用户
~/.zshrc用户级zsh配置zsh交互式shell当前用户

2.详细区别

2.1 /etc/profile(全局配置)

  • 系统级,所有用户登录shell都会读取

  • 只对登录Shell生效

  • 通常用来配置全局 PATH、LANG 变量


2.2 ~/.bash_profile(bash登录时加载)

  • 用户级配置,只影响当前用户

  • 只在 bash 登录Shell 时加载(mac早期默认bash)

  • 常用来 export 环境变量、source ~/.bashrc

  • 只启动一次(登录时)

✅ 典型写法:

export PATH=$PATH:/usr/local/bin
source ~/.bashrc

2.3 ~/.bashrc(bash交互时加载)

  • 只在交互式bash终端、子shell时加载

  • 适合配置 alias、PS1、自动补全

  • 不会在“登录Shell”自动加载,通常通过 .bash_profile 间接加载

✅ 举例:

alias ll='ls -la'

2.4 ~/.zshrc(zsh下专用)

  • zsh 的用户级配置文件

  • zsh 每次打开新终端都会加载

  • 等效于 bash 的 .bashrc + .bash_profile

  • macOS Catalina (10.15) 以后默认 shell 变成了 zsh

✅ 你平时用的 alias、PATH 配置都在这里设置。

3. macOS 下几个文件的关系图

终端启动 (zsh 用户)
    └──> 加载 ~/.zshrc (核心配置文件)

终端启动 (bash 用户)
    └──> 加载 ~/.bash_profile
              └──> 通常会 source ~/.bashrc

系统级(所有用户)
    └──> /etc/profile

4. mac下环境变量应设置在哪个文件中

4.1 如果你用的是 zsh(/bin/zsh)

配置在:

~/.zshrc
# 修改完之后是文件生效:
source ~/.zshrc

这是 90% Mac 用户的正确位置(Catalina 之后默认)。

4.2 如果你用的是 bash(/bin/bash)

配置在:

~/.bash_profile
# 修改完之后是文件生效:
source ~/.bash_profile

老Mac(Catalina 之前)默认是 bash。不过Catalina之后的版本也可以用。

4.3 为什么~/.zshrc中会有 source ~/.bash_profile

source ~/.bash_profile
  • 意思是 强制去加载以前写在 .bash_profile 里的配置

  • 这是兼容老习惯的写法(比如 GOPATH、PATH 可能当时写在 .bash_profile 里)。

  • 所以你在/.bash_profile中配置和在/.zshrc中配置环境变量都会生效

5. mac启动时会加载哪些内容

mac 启动时加载的文件(系统启动 → 用户登录)

5.1. macOS 启动流程(开机启动)
阶段加载内容
1. EFI Bootloader固件、硬件初始化
2. macOS 内核(XNU)系统核心驱动
3. launchd(系统初始化进程)启动所有守护进程、服务
4. /etc/rc.common(老版本有)系统启动脚本(很少改动)
5. launchd 加载 plist 配置/System/Library/LaunchDaemons /Library/LaunchDaemons
5.2. 用户登录后(图形界面登录)
阶段加载内容
1. /etc/profile系统级环境变量(仅登录shell用)
2. /etc/zshrc / /etc/bashrc全局 shell 配置(交互shell用)
3. 用户登录项(系统设置 → 登录项)自动启动的 app
4. LaunchAgents/Library/LaunchAgents 和 ~/Library/LaunchAgents
5. ~/.zprofile / ~/.bash_profile只在“登录Shell”时加载

你开机+登陆桌面后,并不会自动加载 ~/.zshrc,因为 zsh 只在你打开 Terminal 时才加载。

5.3. 开机不打开终端时,加载的核心文件是

作用文件
系统初始化/System/Library/LaunchDaemons/*.plist
用户级自动启动/Library/LaunchAgents/*.plist
当前用户的启动项~/Library/LaunchAgents/*.plist
系统级登录shell(很少生效)/etc/profile
用户登录shell(只有“登录shell”才生效)~/.bash_profile, ~/.zprofile

➡️ 你开机后“不开终端”的情况下:不会加载 ~/.zshrc

➡️ 你开机后“会加载 LaunchDaemons / LaunchAgents 相关配置”

➡️ /.bash_profile、/.zprofile 也只有“登录Shell”时才会用到

➡️ 开机启动的App、后台服务与Shell文件无关

| 你开机 | ➔ 系统加载 LaunchDaemons/LaunchAgents

| 登录桌面 | ➔ 加载用户登录项(App自动启动) |

| 打开终端 | ➔ 才会加载 .zshrc(zsh)、.bash_profile(bash)

6. 为什么没有打开过终端,之前写的go程序也会运行呢

“运行Go编写的程序”和“调用go编译器”是两回事

概念是否需要Go环境解释
运行go编写的程序(二进制文件)❌ 不需要go环境变量因为程序已经编译成了本地可执行文件
用go命令编译/构建代码(go build、go run)✅ 需要go环境变量需要找到go工具链

6.1. 你执行的是“Go编译后生成的二进制文件”

  • Go 是 静态编译语言,编译出来的二进制文件(如 myapp)是独立的。

  • 执行这个二进制文件不需要go环境变量,也不需要GOPATH、GOROOT。

  • 只要你执行的是:

./myapp
  • 它只依赖操作系统(syscall、libc)就能跑。

6.2. 只有“用go命令”才需要go环境变量

  • 比如:
go build main.go
go run main.go
  • 这才会去找 GOROOT、GOPATH、PATH 里的go工具链。

6.3. 场景及情况

场景结果
你写的 Go 程序编译后,双击或用 Automator/脚本调用✅ 正常运行(二进制文件)
你打开终端,手动执行 go build这时才会找go环境
Finder / App 只管可执行文件本身跟go命令无关

6.4. 验证一下

你可以试着把go编译器彻底删除:

which go
sudo rm -rf $(which go)

然后运行你编译好的二进制文件:

./my-go-program

会发现 ➔ 还能运行

但是你再试试:

go build

这时候才会提示:

zsh: command not found: go

6.5. 一句话总结

运行Go写的程序 ≠ 运行Go命令

➔ 你运行的只是“编译好的二进制”,跟Go开发环境、GOROOT、.zshrc 完全没关系。

7 配置go、java、python环境变量实例

这里以go为里

7.1 下载go

打开go官网

All releases - The Go Programming Language

由于是手动配置环境,这里下载.pkg,安装的方式;而选择压缩包的方式。注意:这里注意你本机芯片的架构方式,我选择的是arm64

7.2 解压到指定目录

7.3 设置.zshrc文件

vim ~/.zshrc

保存退出,使环境变量生效

vim ~/.zshrc

您可能感兴趣的与本文相关的镜像

Python3.8

Python3.8

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值