我想附加到 OS X 上的全局 PATH 环境变量,以便所有用户 shell 和 GUI 应用程序都获得相同的 PATH 环境。
我知道我可以附加到 shell 启动脚本中的路径,但这些设置不会被 GUI 应用程序继承。
到目前为止,我发现的唯一方法是在/etc/launchd.conf中重新定义 PATH 环境变量:
setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path
我想不出一种方法来实际附加到 PATH 中的launchd.conf
.
我有点担心这种方法,但到目前为止,这是唯一有效的方法。有没有更好的办法?
palmer 的 GUI 信息是正确的,但是有一种更易于维护的方式来修改 shell 看到的路径。就像mediaslave 说的那样,您可以编辑
/etc/paths
,但更好的是,您可以将一个文本文件放入/etc/paths.d/
其中包含路径,并且所有 shell 都会正确构建路径。例如,在我的系统上:
/etc/launchd.conf
该文件是**唯一适用于OS X v10.8 (Mountain Lion) 和v10.9
launchd.conf
(Mavericks)上的命令行和 GUI 应用程序的完整解决方案,适用于所有用户的 GUI 和控制台应用程序.添加
在上面的示例中,我添加
/usr/local/bin
了 PATH 的默认环境值。请记住,此文件不是脚本,您没有使用替换的选项。此外,要应用这些,您需要重新启动。
请记住,所有其他只是部分解决方案:
environment.plist
不适用于通过 Spotlight 启动的应用程序。/etc/paths
- 仅适用于控制台/etc/csh.cshrc
或/etc/bashrc
- 仅适用于某些 shell此答案基于Setting environment variables on Mac OS X中的相同问题。
您将不得不逐个外壳设置它;Bash 和类似 csh 的 shell 不共享用于调整 PATH 的相同配置文件和语法。
尝试这样做是
launchctl
行不通的,因为环境变量是在登录时设置的;它们在 shell 会话之外的 Unix 系统范围内不存在。所以你要添加
到
/etc/csh.cshrc
和到
/etc/bashrc
.如果您想要 GUI 应用程序中的环境变量,那就更复杂了。您必须
.MacOSX/environment.plist
在每个用户的主目录中创建一个文件。默认情况下该.MacOSX
目录可能不存在,因此您必须创建它。文件的格式是这样的:
有关更多信息,请
environment.plist
访问 Apple 网站。您可以通过向 中添加行来编辑全局路径
/etc/paths
,每行一个路径。sudo nano /etc/paths
应该带你到那里。您是否查看过
path_helper
OS X 上命令行实用程序的手册页?我在 SO 上回答了一个有点相关的问题,我认为您可能会觉得有帮助。我不确定是否有人涵盖了最简单和最优雅的方式。至少在Mac OS X v10.6 (Snow Leopard) 上。
弄乱文件可能会起作用
[/etc/|~/.]
,[profile|bashrc]
但它有点像黑客。该/etc/paths.d/
目录是要走的路:创建一个名为
*name*
(只是不要将其命名为已经存在的名称)的新文件,/etc/paths.d/
其中每行有一个路径:然后加
到
profile
orbashrc
,你应该很高兴。我不确定 launchd 是否接受这一点,但请尝试:
我不确定你为什么要使用
/etc/launchd.conf
而不是/etc/profile
- 但我不是 Mac OS X 方面的专家 - 我相信你,我确信它可以工作,但launchd
Mac OS X 的实现/替换是init
- Mac OS X让我很困惑。无论如何,
setenv PATH "$PATH:/more/paths:/and/more/paths"
将工作(tcsh),并且 bourn shell 等价物是export PATH="$PATH:/more/paths:/and/more/paths"
- 我也不知道launchd
与特定 shell 有什么关系。我想我已经问了更多问题然后我已经回答了=)