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


139

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陈述


5
来自SMcCandlish的评论:easiest solution when you want to make a site-wide path change (e.g. to include /usr/libexec or whatever) is to edit /etc/paths . While the new /etc/paths.d/ thing is functional, it's actually more hassle than maintaining a single file. As others have hinted but not spelled out, if the path changes you want would be useful only for one user, it's best to make that change in the bash and/or tcsh config files in that user's home directory instead of system-wide.
Sathyajith Bhat

@Sathya,在我看来/etc/paths.d对安装脚本很有用。如果我想让我的安装脚本将已安装的程序添加到该路径中,则可以在中放置一个文件/etc/paths.d。如果我想手动编辑路径,这/etc/paths是一个更好的选择。
haydenmuhl 2012年

我主要根据此帖子制作了一个脚本,该脚本迅速打印出了沿以下多个位置定义PATH的位置:gist.github.com/lopespm/6407349952bc8a1ff8fb
Pedro Lopes

Answers:


161

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也被外壳读取。


/opt/local/bin~/.tcshrc由MacPorts 添加。另外请务必查看~/.cshrc


5
显然,~/.MacOSX/environment.plist这不适用于某些人。在OS X更改路径中,/etc/paths.d描述了使用文件夹的替代方法。我还没有测试过。
Arjan 2010年

为+1 ~/.cshrc。疯了试图找出为什么~/.profile不起作用。
tomlogic

我认为这个答案是不完整的。我试图找出错误(不存在)的路径在哪里:/ usr / bin / local,我的shell正在抱怨,并且不在任何这些文件中。
汤米

我认为.bashrc无论您键入bash与否都可以阅读。
Xiao Peng-ZenUML.com

48

看看文件/etc/paths,它是用来通过/usr/libexec/path_helper,这是使用/etc/profile

对于MacPorts,使用sudo /etc/paths/opt/local/bin并重新打开终端窗口。


25

认真地说,豹纹给我们提供了一种新的途径。只需创建一个包含要添加的路径部分的文件,然后将其放在/etc/paths.d中即可

一步完成此操作的一个简单示例是:

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

否则,您可以直接转到/etc/paths.d并将文件直接放在此处。无论哪种方式,该目录中文件中的所有路径部分都将附加到默认路径。

这也适用于人行道。

这是更多详细信息的链接:

ars technica:如何在雪豹的PATH中添加一些内容?

第二点:MacPorts正是将所有内容放入opt目录,因为苹果公司的东西没有使用它。这样就不会冲突。他们的指南(写得很好,BTW)解释了为什么使用opt以及如何根据需要更改默认值。

MacPorts指南


很酷。现在我们只需要获取那些依赖于路径的应用程序,就不会再污染我们的配置文件了……
Daniel Beck

爱它。简单!
Andrew Hedges,

来自SMcCandlish的评论:I have to concur that there's nothing weird or bad about MacPorts using /opt (likewise Fink uses /sw); trying to replace stock Mac BSD parts with bleeding-edge builds from external projects like these is a recipe for an unusable system that requires an OS reinstallation.
Sathyajith Bhat

单行,无需追加文件,易于删除。喜欢这个。感谢leanne
Ibrahim Lawal

4

要显示您的路径,请回显$ PATH。

echo $PATH

要设置路径,请编辑~/.bash_profile,而不要编辑~/.bash_login


3

还有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路径与普通终端路径相似,则可以添加source /etc/profile到.bashrc中。


感谢您的提示!我一直在寻找ssh解决方案。svn + ssh不能完全找到svnserve命令,因为svnserve的路径在.profile中,但不在.bashrc中。
KIR

2

可以用以下两种方式定义:

  • 系统变量- /etc/paths
  • 用户变量-参见@Steve Folly的说明

1

实际上,它存储在.profile文件中而不是文件中.bash_login,MacPorts通常使用它而不是.bash_login文件。

/opt目录通常也由MacPorts创建,并将其文件存储在此文件夹中。


1

关于文档/usr/libexec/path_helper工具,为$ PATH初始成分是从拍摄/etc/paths,并且默认的样子

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

对于OS-X Snow Leopard

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.