MacOS 环境变量
MacOS 环境变量
平时用过 Windows 系统的人都知道,安装好一个软件或工具后,需要将可执行文件所在的目录添加到环境变量中,然后才能使用相关的一些命令。比如安装完 CMake 之后,通过 CMake 命令来构建我们的工程。
接下来将说明 MacOS 中环境变量的相关内容,以及如何设置 Mac 系统中的环境变量。
Shell 类型
MacOS 内置了多种 Shell,而 Mac 的环境变量是与当前使用的 Shell 类型有关的。
通过命令cat /etc/shells
可以查看所有内置的 Shell:
% cat /etc/shells /bin/bash /bin/csh /bin/dash /bin/ksh /bin/sh /bin/tcsh /bin/zsh
通过命令echo $SHELL
来查看当前使用的 Shell:
% echo $SHELL /bin/zsh
- sh(全称 Bourne Shell)是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。Bourne Shell 在 shell 编程方便相当优秀,但在处理与用户的交互方便作得不如其他几种 shell。
- bash(全称 Bourne Again Shell)LinuxOS 默认的,它是 Bourne Shell 的扩展。与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基础上增加了很多特性。可以提供命令补全,命令编辑和命令历史等功能。它还包含了很多 C Shell 和 Korn Shell 中的优点,有灵活和强大的编辑接口,同时又很友好的用户界面。
- csh(全称 C Shell)是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似。
- tcsh 是 Linux 提供的 C Shell 的一个扩展版本。Tcsh 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C 语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 Bash Shell 更多的提示符参数。
- ksh(全称 Korn Shell)集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
pdksh 是 Linux 系统提供的 ksh 的扩展。pdksh 支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。 - zsh Zsh 是一款功能强大终端(shell)软件,既可以作为一个交互式终端,也可以作为一个脚本解释器。它在兼容 Bash 的同时 (默认不兼容,除非设置成 emulate sh) 还有提供了很多改进,例如:更高效、更好的自动补全、更好的文件名展开(通配符展开)、更好的数组处理、可定制性高。
环境变量配置文件
在当前最新的 Mac 系统(我的是macOS Catalina 10.15.5)中,默认使用的 Shell 是 zsh,其环境变量配置文件及加载顺序如下:
/etc/profile /etc/zshrc /etc/paths ~/.zshrc
其中 /etc/profile
、 /etc/zshrc
和 /etc/paths
是系统级环境变量,对所有用户有效。但它们的加载时机有所区别:
- /etc/profile 任何用户登陆时都会读取该文件
- /etc/zshrc shell执行时,不管是何种方式,读取此文件
- /etc/paths 任何用户登录时都会读取该文件
最后一个是当前用户级的环境变量,如果是 zsh 则相应的环境变量配置文件是 ~/.zshrc
。
如果文件 ~/.zshrc
不存在,则可以自己创建一个。
添加环境变量
系统级环境变量
最好不要通过修改 /etc/paths 文件的方式来添加环境变量,而是将路径写在 /etc/paths.d/ 目录下的一个文件里,系统会逐一读取 /etc/paths.d/ 下的每个文件。
用户级环境变量
修改 ~/.zshrc 文件来添加用户环境变量。
其它说明
有时你可能会有这个疑惑:我安装了一个软件之后,并没有手动将目录添加到环境变量中,并且输出环境变量也找不到相关目录,为什么可以直接使用它的相关命令呢?
以 Java 为例。首先我们查看当前环境变量中包含哪些路径:
% echo $PATH /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
通过查找其中的每个目录,我们发现,在 /usr/bin
目录下,有一个 java 的替身(类似快捷方式)。在安装 Java 的时候,已经将 java 可执行程序制作了替身,放在 /usr/bin
目录下了。