Mac系统下查看环境变量的方法详解

7 次阅读

一、使用 env 命令查看Mac环境变量

打开“终端”应用,直接执行:

Bash
env

终端会列出当前Shell进程能够访问的全部环境变量,例如:

PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
HOME=/Users/username
USER=username
SHELL=/bin/zsh
LANG=zh_CN.UTF-8

其中,PATH、HOME、USER、SHELL等变量在Mac开发和系统配置中比较常见。

如果只想查看某一个环境变量,可以使用:

Bash
echo $PATH

查看Java相关环境变量:

Bash
echo $JAVA_HOME

查看Node.js相关变量:

Bash
echo $NODE_PATH

如果变量不存在,通常不会输出任何内容。

二、使用 printenv 查看环境变量

printenv与env类似,也可以直接查看当前环境变量:

Bash
printenv

如果只需要查询指定变量,printenv更加直观:

Bash
printenv PATH

例如:

/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

也可以使用:

Bash
printenv HOME

获取当前用户的Home目录。

因此,如果需求只是“Mac查看某个环境变量”,推荐直接采用:

Bash
printenv 变量名

这种写法不需要使用$,可读性也比较好。

三、使用 echo 查看指定环境变量

echo是Mac终端中最常用的环境变量查看方式之一。

例如查看PATH:

Bash
echo $PATH

查看当前用户:

Bash
echo $USER

查看Shell类型:

Bash
echo $SHELL

查看Home目录:

Bash
echo $HOME

需要注意,Shell变量引用通常需要在变量名前添加$。例如:

Bash
echo PATH

输出的是:

PATH

而:

Bash
echo $PATH

才会输出PATH变量实际保存的内容。

四、查看Mac中的PATH环境变量

PATH是开发环境中最常被查询的环境变量之一,它决定Shell查找可执行程序时搜索哪些目录。

执行:

Bash
echo $PATH

可能得到:

/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin

PATH中的多个目录使用冒号:分隔。

如果想让PATH按照目录逐行显示,可以执行:

Bash
echo $PATH | tr ':' '
'

输出效果类似:

/opt/homebrew/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin

这种方式特别适合排查“终端明明安装了某个软件,但执行命令却提示找不到”的问题。

例如:

Bash
which java

或者:

Bash
which node

可以进一步确认Shell实际使用的是哪个程序。

五、查看当前Shell类型

不同Mac版本以及不同用户环境可能使用不同Shell。较新的macOS默认使用Zsh,可以执行:

Bash
echo $SHELL

如果输出:

/bin/zsh

说明当前用户默认Shell是Zsh。

也可以执行:

Bash
echo $0

查看当前终端会话使用的Shell。

查看Shell版本则可以根据实际环境执行对应命令,例如:

Bash
zsh --version

或者:

Bash
bash --version

确认Shell类型非常重要,因为环境变量配置文件与Shell有关。

六、查看Shell中的全部变量

如果不仅需要查看环境变量,还希望查看当前Shell中定义的变量,可以使用:

Bash
set

不过需要注意,set输出的内容通常比env更多。

简单来说:

  • env:主要查看环境变量

  • printenv:查看环境变量,也适合查询单个变量

  • echo $变量名:快速查看指定变量

  • set:查看Shell变量、函数以及环境变量等更完整的信息

因此,日常排查环境配置时,优先使用env、printenv和echo即可。

七、查看Mac环境变量配置文件

如果执行echo $PATH发现环境变量与预期不一致,还需要检查环境变量到底在哪里配置。

对于使用Zsh的Mac系统,常见配置文件包括:

Bash
~/.zshrc

可以使用:

Bash
cat ~/.zshrc

查看配置内容。

如果文件内容较长,可以使用:

Bash
less ~/.zshrc

也可以搜索PATH配置:

Bash
grep PATH ~/.zshrc

常见配置形式如下:

Bash
export PATH="/opt/homebrew/bin:$PATH"

如果使用其他Shell或存在历史配置,还可能涉及:

Bash
~/.zprofile
~/.zshenv
~/.bash_profile
~/.bashrc

不同配置文件的加载时机并不完全相同,因此遇到环境变量“有时生效、有时不生效”的情况,不能只检查一个文件。

八、查看环境变量是否已经生效

修改环境变量配置文件后,仅仅保存文件并不一定会立即影响当前终端。

例如修改了:

Bash
~/.zshrc

可以执行:

Bash
source ~/.zshrc

然后再次查看:

Bash
echo $PATH

如果使用Java环境变量,可以执行:

Bash
echo $JAVA_HOME

再检查Java:

Bash
java -version

如果命令能够正常执行,通常说明相关环境配置已经被当前Shell加载。

也可以直接关闭当前终端窗口并重新打开一个终端,再执行环境变量查询命令。

九、通过 launchctl 查看macOS图形环境变量

Mac中的环境变量还涉及Shell环境与macOS用户启动环境之间的区别。

可以使用:

Bash
launchctl getenv PATH

查询由launchd管理的用户环境中的PATH。

查询其他变量也可以使用:

Bash
launchctl getenv JAVA_HOME

需要注意,launchctl获取的环境与直接执行:

Bash
echo $JAVA_HOME

得到的结果可能不同。

这是因为终端Shell加载了自己的配置文件,而图形界面启动的应用程序并不一定经过同样的Shell初始化过程。

因此,如果出现“终端中程序正常,但从Finder、IDE或其他图形应用启动时找不到环境变量”的问题,就需要同时考虑Shell环境和launchd环境。

十、在Mac中排查环境变量不生效

遇到环境变量配置失败时,可以按照下面的顺序检查。

首先确认变量当前是否存在:

Bash
printenv JAVA_HOME

然后确认Shell:

Bash
echo $SHELL

接着检查配置文件:

Bash
grep -n "JAVA_HOME" ~/.zshrc ~/.zprofile ~/.zshenv 2>/dev/null

如果配置类似:

Bash
export JAVA_HOME="/Library/Java/JavaVirtualMachines/xxx/Contents/Home"

可以重新加载对应配置:

Bash
source ~/.zshrc

再次执行:

Bash
echo $JAVA_HOME

最后检查实际使用的程序路径:

Bash
which java

以及:

Bash
java -version

这样可以区分究竟是“环境变量没有设置”,还是“环境变量设置正确但PATH指向了其他程序”。

十一、查看某个程序实际使用的环境变量

如果需要确认一个程序启动时继承了哪些环境变量,可以使用macOS提供的ps等工具辅助排查。

对于当前Shell,可以先查看:

Bash
env

然后结合程序启动命令进行判断。

例如:

Bash
env | grep -i java

只筛选名称中包含java的变量。

查看PATH相关信息:

Bash
env | grep '^PATH='

查看所有以HOME开头的变量:

Bash
env | grep '^HOME'

这种过滤方式适合变量很多的开发环境,可以避免直接阅读大量无关输出。

十二、env、printenv和echo应该怎么选择

三种方式用途略有区别。

命令主要用途示例
env查看当前环境变量env
printenv查看环境变量或指定变量printenv PATH
echo快速输出变量值echo $PATH
set查看更完整的Shell状态set
launchctl getenv查看launchd环境变量launchctl getenv PATH

如果只是想快速查看PATH,使用:

Bash
echo $PATH

如果想查看一个指定环境变量,推荐:

Bash
printenv PATH

如果需要查看全部环境变量,则可以使用:

Bash
env

如果问题涉及macOS图形应用、Finder或者IDE中的环境变量,则可以进一步检查:

Bash
launchctl getenv 变量名

十三、常见Mac环境变量及作用

Mac开发环境中经常遇到以下变量:

PATH:指定Shell搜索可执行文件的目录。

HOME:当前用户的主目录,例如:

/Users/username

USER:当前登录用户名称。

SHELL:当前用户默认Shell路径,例如:

/bin/zsh

LANG:语言和区域设置相关信息。

JAVA_HOME:Java开发环境中常用的JDK安装目录变量。

ANDROID_HOME或ANDROID_SDK_ROOT:Android开发环境中用于指定Android SDK位置的变量,具体使用哪个变量取决于工具和项目配置。

查看这些变量时,都可以采用:

Bash
printenv 变量名

或者:

Bash
echo $变量名

十四、查看环境变量时的几个注意事项

第一,不要把Shell变量和环境变量完全等同起来。Shell中定义的变量只有通过export导出后,才会作为环境变量传递给子进程。

例如:

Bash
MY_VAR="hello"

此时它是当前Shell中的变量。

如果执行:

Bash
export MY_VAR

它才会成为环境变量,并能够被子进程继承。

第二,环境变量具有进程继承关系。终端中看到的变量,不一定代表所有Mac应用程序启动时都能看到相同的变量。

第三,修改.zshrc后,最好执行:

Bash
source ~/.zshrc

或者重新打开终端验证配置。

第四,配置PATH时不要轻易覆盖原有PATH。例如不推荐直接写成:

Bash
export PATH="/my/bin"

因为这样可能导致系统原有命令无法正常找到。更常见的写法是:

Bash
export PATH="/my/bin:$PATH"

通过保留原来的$PATH,可以减少对系统命令搜索路径造成的影响。

十五、Mac查看环境变量的实用命令汇总

日常使用时,可以记住下面几条命令:

Bash
# 查看全部环境变量
env

# 查看全部环境变量
printenv

# 查看PATH
echo $PATH

# 将PATH逐行显示
echo $PATH | tr ':' '
'

# 查看指定环境变量
printenv JAVA_HOME

# 查看Shell
echo $SHELL

# 查找某个命令的位置
which java

# 查看Zsh配置
cat ~/.zshrc

# 重新加载Zsh配置
source ~/.zshrc

# 查看launchd中的变量
launchctl getenv JAVA_HOME

掌握这些命令后,基本可以覆盖Mac系统下大多数环境变量查看和排查场景。尤其是在配置Java、Python、Node.js、Android SDK、Homebrew等开发工具时,先通过echo、printenv确认变量值,再检查Shell配置文件和PATH路径,通常能够更快定位问题。