我想将其附加到 OS X 上的全局 PATH 环境变量,以便所有用户 shell 和 GUI 应用程序都能获得相同的 PATH 环境。
我知道我可以将其附加到 shell 启动脚本中的路径,但是这些设置不会被 GUI 应用程序继承。
到目前为止我发现的唯一方法是重新定义 PATH 环境变量/etc/launchd.conf:
setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path
我无法找到真正将其附加到 PATH 的方法launchd.conf
。
我有点担心这个方法,但到目前为止,这是唯一有效的方法。有没有更好的方法?
答案1
palmer 的 GUI 信息是正确的,但还有一种更易于维护的方法来修改 shell 看到的路径。例如mediaslave 说,您可以编辑/etc/paths
,但更好的是,您可以放入一个/etc/paths.d/
包含路径的文本文件,所有 shell 都会正确构建该路径。
例如,在我的系统上:
$ cat /etc/paths
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
$ ls /etc/paths.d
X11 git postgres
$ cat /etc/paths.d/postgres
/Library/PostgreSQL/8.4/bin
$ echo $PATH
/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/git/bin:/Library/PostgreSQL/8.4/bin:/usr/X11/bin:/usr/local/mysql/bin
答案2
/etc/launchd.conf
该launchd.conf
文件是**唯一适用于命令行和 GUI 应用程序的完整解决方案OS X 版本 10.8(美洲狮)和v10.9(Mavericks),可以与 GUI 和控制台应用程序配合使用,适合所有用户。
sudo touch /etc/launchd.conf
sudo nano /etc/launchd.conf
添加
setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
在上面的例子中,我添加了/usr/local/bin
PATH 的默认环境值。
请记住,此文件不是脚本,您无法使用替换。此外,要应用这些,您需要重新启动。
请记住,所有其他解决方案都只是部分解决方案:
environment.plist
不适用于通过 Spotlight 启动的应用程序。/etc/paths
- 仅适用于控制台/etc/csh.cshrc
或者/etc/bashrc
- 仅适用于某些 shell
此答案基于来自在 Mac OS X 上设置环境变量。
答案3
您必须根据每个 shell 进行设置;Bash 和类似 csh 的 shell 不共享相同的配置文件和调整 PATH 的语法。
尝试这样做是launchctl
行不通的,因为环境变量是在登录时设置的;它们在 Unix 中除了 shell 会话之外并不存在于系统范围内。
因此你需要添加
setenv PATH "$PATH:/add/my/extra/path"
至/etc/csh.cshrc
和
export PATH="$PATH:/more/paths:/
到/etc/bashrc
。
如果您想要在 GUI 应用程序中使用环境变量,那就更复杂了。您必须.MacOSX/environment.plist
在每个用户的主目录中创建一个文件。.MacOSX
默认情况下,该目录可能不存在,因此您必须创建它。
该文件的格式如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>PRINTER</key>
<string>myprinter</string>
<key>PATH</key>
<string>/path/to/thing/I/need</string>
<key>DISPLAY</key>
<string>0:1</string>
</dict>
</plist>
更多关于environment.plist
在苹果网站上。
答案4
你看过path_helper
OS X 命令行实用程序的手册页吗?我回答了一个关于SO的一些相关问题我想你可能会觉得有帮助。