我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 安装中甚至不存在该目录。
更新:谢谢杰伯曼纠正我的echo $PATH
陈述
答案1
启动时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
。
答案2
看一下该文件/etc/paths
,该文件被使用/usr/libexec/path_helper
,该文件被使用/etc/profile
。
对于 MacPorts,使用sudo /etc/paths/opt/local/bin
并重新打开终端窗口。
答案3
说真的,Leopard 为我们提供了一种添加路径的新方法。只需创建一个包含要添加的路径部分的文件,然后将其放入 /etc/paths.d 中
一步完成此操作的一个简单示例是:
echo "/some/path/to/add" >> /etc/paths.d/somefilename
否则,您可以直接转到 /etc/paths.d 并将文件放在那里。无论哪种方式,该目录中文件的任何路径部分都将附加到默认路径。
这也适用于 manpath。
以下是更多详细信息的链接:
ars technica:如何在雪豹中向 PATH 添加一些内容?
第二点:MacPorts 将所有内容放入 opt 目录,正是因为 Apple 的产品不使用该目录。这样就不会发生冲突。他们的指南(顺便说一句,写得非常好)解释了为什么使用 opt,以及如何更改该默认设置(如果您愿意)。
答案4
还有由以下因素确定的路径远程控制。
echo $PATH
与进行比较ssh 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 路径与您的正常终端路径相似,您可以将其添加source /etc/profile
到您的 .bashrc 中。