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
  1. sh(全称 Bourne Shell)是UNIX最初使用的 shell,而且在每种 UNIX 上都可以使用。Bourne Shell 在 shell 编程方便相当优秀,但在处理与用户的交互方便作得不如其他几种 shell。
  2. bash(全称 Bourne Again Shell)LinuxOS 默认的,它是 Bourne Shell 的扩展。与 Bourne Shell 完全兼容,并且在 Bourne Shell 的基础上增加了很多特性。可以提供命令补全,命令编辑和命令历史等功能。它还包含了很多 C Shell 和 Korn Shell 中的优点,有灵活和强大的编辑接口,同时又很友好的用户界面。
  3. csh(全称 C Shell)是一种比 Bourne Shell更适合的变种 Shell,它的语法与 C 语言很相似。
  4. tcsh 是 Linux 提供的 C Shell 的一个扩展版本。Tcsh 包括命令行编辑,可编程单词补全,拼写校正,历史命令替换,作业控制和类似 C 语言的语法,他不仅和 Bash Shell 提示符兼容,而且还提供比 Bash Shell 更多的提示符参数。
  5. ksh(全称 Korn Shell)集合了 C Shell 和 Bourne Shell 的优点并且和 Bourne Shell 完全兼容。
    pdksh 是 Linux 系统提供的 ksh 的扩展。pdksh 支持人物控制,可以在命令行上挂起,后台执行,唤醒或终止程序。
  6. 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 是系统级环境变量,对所有用户有效。但它们的加载时机有所区别:

  1. /etc/profile 任何用户登陆时都会读取该文件
  2. /etc/zshrc shell执行时,不管是何种方式,读取此文件
  3. /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 目录下了。

相关推荐