在 macOS Yosemite 和 El Capitan 中设置环境变量

在 macOS Yosemite 和 El Capitan 版本中,通过 launchd 配置文件 (launchd.conf) 设置环境变量的方法不再有效。本文将探讨这一变化的原因,并提供替代方法来设置系统级和用户级别的环境变量。

问题概述

macOS Yosemite 引入了系统的安全性增强措施,其中包括对 launchd.conf 文件的更改。在之前的 macOS 版本中,可以通过编辑 /etc/launchd.conf~/.launchd.conf 文件来设置环境变量。然而,在 Yosemite 及后续版本中,这些文件不再被读取和解析。

为什么 launchd.conf 不再有效?

macOS Yosemite 引入了系统完整性保护(System Integrity Protection, SIP)机制,以提高系统的安全性和稳定性。SIP 对某些关键目录进行了保护,限制了用户对这些目录的修改权限。因此,即使你手动编辑了 /etc/launchd.conf 文件,系统也不会读取其中的内容。

设置环境变量的方法

尽管 launchd.conf 不再有效,仍然有多种方法可以在 macOS Yosemite 和 El Capitan 中设置环境变量。

1. 使用 ~/.bash_profile~/.zshrc

如果你使用的是 Bash 或 Zsh 终端,可以通过编辑相应的配置文件来设置用户级别的环境变量。

对于 Bash 用户

编辑或创建 ~/.bash_profile 文件:

nano ~/.bash_profile

添加以下内容以设置环境变量:

export MY_VARIABLE="my_value"

保存并退出编辑器,然后重新加载配置文件:

source ~/.bash_profile

对于 Zsh 用户

编辑或创建 ~/.zshrc 文件:

nano ~/.zshrc

添加以下内容以设置环境变量:

export MY_VARIABLE="my_value"

保存并退出编辑器,然后重新加载配置文件:

source ~/.zshrc

2. 使用 ~/.MacOSX/environment.plist 文件

macOS 提供了另一种方法来设置用户级别的环境变量,即通过创建或修改 ~/.MacOSX/environment.plist 文件。

首先,确保 ~/.MacOSX 目录存在:

mkdir -p ~/.MacOSX

然后,使用 plutil 工具创建并编辑 environment.plist 文件:

plutil -dict-new ~/.MacOSX/environment.plist
plutil -add MY_VARIABLE -string "my_value" ~/.MacOSX/environment.plist

保存文件后,重启应用程序以使更改生效。

3. 使用 Launch Agents

Launch Agents 可以用来设置系统级别的环境变量。以下是一个示例,展示如何使用 Launch Agent 设置环境变量。

创建一个新的 .plist 文件:

nano ~/Library/LaunchAgents/set_environment_variable.plist

添加以下内容到文件中:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN"
        "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>set_environment_variable</string>
    <key>ProgramArguments</key>
    <array>
        <string>/bin/sh</string>
        <string>-c</string>
        <string>launchctl setenv MY_VARIABLE my_value</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

保存并退出编辑器,然后加载 Launch Agent:

launchctl load ~/Library/LaunchAgents/set_environment_variable.plist

4. 使用 /etc/profile/etc/paths.d/

虽然 launchd.conf 不再有效,但你仍然可以通过修改 /etc/profile 文件来设置系统级别的环境变量。

编辑或创建 /etc/profile 文件:

sudo nano /etc/profile

添加以下内容以设置环境变量:

export MY_VARIABLE="my_value"

保存并退出编辑器。重启终端以使更改生效。

总结

macOS Yosemite 和 El Capitan 引入的安全性增强措施使得 launchd.conf 文件不再被读取和解析。不过,通过其他方法如修改 shell 配置文件、使用 ~/.MacOSX/environment.plist 文件、Launch Agents 以及 /etc/profile 文件,仍然可以有效地设置环境变量。

选择适合你的方法来设置环境变量,确保系统稳定性和安全性的同时满足开发需求。