默认情况下,OS X 10.6使用/usr/libexec/path_helper
添加文件/etc/paths
中列出的以下路径:
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
这意味着/usr/bin
位于路径/usr/local/bin
之前。这会导致调用/usr/bin
中git installed by Xcode 4的版本而不是Homebrew安装到/usr/local/bin
的版本。
这引出了我的问题,/usr/local/bin
在路径/usr/bin
之前出现了问题吗?是否有特定原因导致Apple默认/usr/bin
之前有/usr/local/bin
?
/usr/bin
和/usr/local/bin
将/usr/local/bin
从文件/etc/paths
的底部移到顶部是否有问题?这样做会影响路径,而不仅仅是当我启动终端时,因为/usr/libexec/path_helper
可以被其他资源使用(我不确定这一点)。
虽然多余,但我将/usr/local/bin
添加到~/.bash_profile
中的路径似乎更安全,这意味着/usr/local/bin
将在路径上两次。
答案 0 :(得分:27)
不,不。它们只是很奇怪......根据定义,本地应该覆盖。
答案 1 :(得分:3)
我遇到同样的问题,并在google搜索中找到了以下链接。
https://discussions.apple.com/thread/3588837?start=0&tstart=0
他们说出于安全原因修改 / etc / paths 并不是一个好主意。
答案 2 :(得分:2)
我发现上述所有内容都很有用,特别是@Ohgyun Ahn's警告。所以我建议妥协,我刚刚实施:
修改/etc/paths
或/private/etc/paths
(因为它在OS X 10.8中)并且仅覆盖git 。在实现最新的git以供实际检查系统范围路径的所有程序使用时,这会逃避任何安全隐患(与git无关)。
/usr/local/git-override/
/usr/local/bin
重新创建git符号链接。/usr/local/git-override
添加到(/private)/etc/paths
的顶部。希望这对其他人有帮助。
答案 3 :(得分:2)
我想补充一点,如果你想保持你的PATH干净(没有重复的条目),你可以将以下内容添加到.bash_profile中以达到预期的效果:
# remove /usr/local/bin and /usr/bin
export PATH=`echo ":$PATH:" | sed -e "s#:/usr/local/bin:#:#g" -e "s/^://" -e "s/:$//"`
export PATH=`echo ":$PATH:" | sed -e "s#:/usr/bin:#:#g" -e "s/^://" -e "s/:$//"`
# add /usr/local/bin and /usr/bin in that order
export PATH="/usr/local/bin:/usr/bin:$PATH"
我从http://ntk.me/2013/05/04/path-environment-variable/
那里学到了一个小技巧编辑:非常重要!不要得到那些删除错误的命令!如果您这样做,sed
将无效,您将被/usr/local/bin:/usr/bin:
作为您的路径!
值得注意的是,其他人认为这可能会引入一些安全问题是正确的。请务必了解所涉及的风险!
答案 4 :(得分:1)
由于修改了/etc/paths
接缝的顺序而不鼓励系统稳定性和安全性......这里我的解决方案基于@vmrob的答案
read PATH < <(echo "$PATH" | sed \
-e 's/^/:/' -e 's/$/:/' \
-e 's_:/usr/local/bin:_:_g' \
-e 's_:/usr/local/sbin:_:_g' \
-e "s_:/usr/bin:/bin:_:$HOME/bin:/usr/local/bin:/usr/bin:/bin:_" \
-e "s_:/usr/sbin:/sbin:_:$HOME/sbin:/usr/local/sbin:/usr/sbin:/sbin:_" \
-e 's/^://' -e 's/:$//')
export PATH