it-swarm.cn

如何在OS X上设置全局PATH环境变量?

我想在OS X上附加全局PATH环境变量,以便所有用户外壳程序和GUI应用程序都获得相同的PATH环境。

我知道我可以在Shell启动脚本中追加路径,但是GUI应用程序不会继承那些设置。

到目前为止,我发现的唯一方法是在/ etc/launchd.conf中重新定义PATH环境变量:

setenv PATH /usr/bin:/bin:/usr/sbin:/sbin:/my/path

我想不出一种方法来实际附加到launchd.conf

我对此方法有些担心,但是到目前为止,这是唯一可行的方法。有没有更好的办法?

102
lajos

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
72
cogg

/etc/launchd.conf

launchd.conf文件是**唯一适用于 OS X v10.8 (Mountain Lion)和 v10.9 (Mavericks)上的命令行和GUI应用程序的完整解决方案),它将与所有用户的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-仅适用于某些外壳

该答案基于在Mac OS X上设置环境变量中的相同问题。

48
sorin

您将必须逐个Shell地进行设置。 Bash和类似csh的外壳程序不共享相同的配置文件和用于调整PATH的语法。

尝试在launchctl中执行此操作将不起作用,因为在登录时设置了环境变量。它们在Shell会话之外的Unix中不存在于系统范围内。

所以你要添加

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在Apple网站上

7
palmer

您可以通过向/etc/paths添加行(每行一个路径)来编辑全局路径。

Sudo nano /etc/paths应该可以带您到那里。

3
manumoomoo

您是否看过OS X上path_helper命令行实用程序的手册页?我回答了 关于SO的一些相关问题 ,我认为您可能会有所帮助。

1
ayaz

我不确定是否有人涵盖最简单和大多数优雅方式。至少在 Mac OS X v10.6 (Snow Leopard)上。

处理[/etc/|~/.]个文件中的[profile|bashrc]个可能会起作用,但这有点不合时宜。 /etc/paths.d/目录是处理方法:

  • 将Sudo变成您最喜欢的编辑器。
  • *name*中创建一个名为/etc/paths.d/的新文件(只是不要为其命名,请每行一个路径):

    /usr/X11/bin
    /Developer/usr/bin
    
  • 然后加

    eval '/usr/libexec/path_helper -s`
    

    profilebashrc,您应该会很好。

1
noboomu

我不确定您为什么要使用/etc/launchd.conf而不是/etc/profile-但是我不是Mac OS X的专家-我相信您可以肯定它会起作用,但是launchdinit的Mac OS X实现/替换-Mac OS X使我感到困惑。

无论如何,setenv PATH "$PATH:/more/paths:/and/more/paths"将起作用(tcsh),而本恩Shell等效项是export PATH="$PATH:/more/paths:/and/more/paths"-我也不知道launchd与特定的Shell之间的关系。

我想我问了更多问题,然后我回答了=)

0
Xerxes

我不确定launchd是否接受此方法,但是请尝试:

setenv PATH“ $ PATH:/ my/path”
0
user1686