2009-11-11 18:48:39 +0000 2009-11-11 18:48:39 +0000
141
141

在 OS X 10.6 Snow Leopard 中,$PATH 在哪里被设置?

我在命令行输入echo $PATH,得到

/opt/local/bin:/opt/local/sbin:/Users/andrew/bin:/usr/local/bin:/usr/local/mysql/bin:/usr/local/pear/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/opt/local/bin:/usr/local/git/bin

我很奇怪,我的.bash_login文件是空的,这是在哪里设置的?

我特别担心,安装完MacPorts后,在/opt里安装了一堆垃圾。我想在正常的Mac OS X安装中根本不存在这个目录。

更新:感谢jtimberman纠正了我的echo $PATH声明。

答案 (7)

161
161
161
2009-11-11 20:57:32 +0000

bash启动时,每次登录时它都会读取以下文件。就 OS X 而言,这意味着每次你打开一个新的 Terminal 窗口时。

/etc/profile
~/.bash_profile
~/.bash_login (if .bash_profile does not exist)
~/.profile (if .bash_login does not exist)

当你在命令行输入bash启动一个新的shell时,它会读取.bashrc

OS X还使用 ~/.MacOSX/environment.plist 来设置更多的环境变量,必要时包括路径。

最后,/etc/paths/etc/paths.d也会被shell读取。

  • *

/opt/local/bin等都是MacPorts在~/.tcshrc中添加的。也一定要在~/.cshrc中寻找。

25
25
25
2011-03-25 18:07:37 +0000

说真的,Leopard给我们提供了一种新的添加路径的方法。只要创建一个包含你要添加的路径部分的文件,然后把它放在/etc/paths.d

一步到位的快速例子是。

echo "/some/path/to/add" >> /etc/paths.d/somefilename

否则,你可以直接进入/etc/paths.d,把文件放在那里。无论哪种方式,该目录下的文件中的任何路径部分都会被追加到默认路径中。

这也适用于manpath。

这里有一个链接来了解更多细节。 ars technica: how do I add something to PATH in snow leopard?

还有一点:MacPorts把所有的东西都放在opt目录下,正是因为它没有被苹果的东西使用。这样就不会冲突了。他们的指南 (写得很好,BTW) 有一个关于为什么使用 opt 以及如何改变默认值的解释,如果你愿意的话。 MacPorts Guide

4
4
4
2009-11-11 19:07:28 +0000

要显示你的路径,回声$PATH.

echo $PATH

要设置你的路径,编辑~/.bash_profile,而不是~/.bash_login

3
3
3
2012-02-07 19:36:18 +0000

还有由ssh确定的路径。

比较echo $PATHssh localhost 'echo $PATH'。因为ssh不读取/etc/profile,所以/usr/libexec/path/helper不运行,因此/etc/paths被跳过。现在试试ssh localhost 'source /etc/profile; echo $PATH'。路径应该更接近。剩下的差异可能是由于你的.bash/_profile (也会被ssh跳过) 和.bashrc (会被ssh读取)中的路径修改造成的。

如果你想让你的ssh路径与普通终端路径相似,你可以在.bashrc中添加source /etc/profile

2
2
2
2013-06-01 09:50:21 +0000

它可以定义在任何一个。

  • 系统变量 - /etc/paths
  • 用户变量 - 参见 @Steve Folly 的解释。
1
1
1
2009-11-11 19:13:39 +0000

其实它是存储在你的.profile文件中,而不是.bash_login,通常MacPorts会用这个来代替.bash_login文件。

另外/opt目录通常是由MacPorts创建的,它将文件存储在这个文件夹中。

1
1
1
2012-06-26 01:40:17 +0000

关于docs/usr/libexec/path_helper实用程序,$PATH的初始组件取自/etc/paths,默认情况下,对于OS-X Snow Leopard来说,它看起来像

/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin