我最近开始配置 OSX 10.7 环境进行开发。我安装了 HomeBrew,并将以下内容添加到我的.bash_profile
:
export PATH="/usr/local/bin:/usr/local/sbin:~/bin:$PATH"
一切都运行良好,除了我echo $PATH
得到以下重复字符串:
/usr/local/bin:/usr/local/sbin:~/bin:/usr/local/bin:/usr/local/sbin:~/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:usr/local/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/local/git/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin
为了使其更具可读性,这些是所有路径:
/usr/local/bin
/usr/local/sbin
~/bin:/usr/local/bin
/usr/local/sbin
~/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
usr/local/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/local/git/bin
/usr/bin
/bin
/usr/sbin
/sbin
/usr/local/bin
/usr/X11/bin
除了路径中的一行之外,我认为我没有对路径进行任何更改.bash_profile
。 配对这些重复项的最佳方法是什么? 有没有办法找出哪些文件正在修改我的路径并尝试消除它们?
答案1
$PATH
无论如何,在发表了我的评论之后,这里有一些修剪建议。
查看您的路径,似乎.bash_profile
被执行了两次,或者在其他地方所做的修改.bash_profile
被重复了。
有 7 个重复的“/usr/local/git/bin”和“use/local/bin”[原文如此],后面还有 5 个“/usr/local/git/bin”的副本。根据 的git
安装方式,您可能能够查询包管理器以了解 安装了哪些文件git
;可能有一些配置文件或修改过的系统文件会影响PATH
。
将其放在set -x
的最顶部.bash_login
,然后启动一个新的登录 shell。您应该会得到大量输出,这些输出会准确显示bash
启动时正在执行的操作,这应该可以帮助您找出PATH
修改的位置。set -x
一旦您弄清楚了,您可以删除它或放弃。如果您没有找到任何东西,您还可以将其添加到 的开头,以/etc/profile
跟踪系统在处理您自己的.bash_profile
操作之前执行的操作。
答案2
我跑了Ryan Thompson 的剧本从命令行。
它删除了所有重复项,没有改变顺序,也没有留下尾随:
PATH="$(perl -e 'print join(":", grep { not $seen{$_}++ } split(/:/, $ENV{PATH}))')"
除了上面方便的一行代码之外,Ryan 还分享了他用来config
删除其他变量重复项的(更结构化的)脚本和 这PATH
。
答案3
我将其添加到我的 $HOME/.bashrc(如果您愿意,您也可以将其添加到 .bash_profile)以从 $PATH 中删除重复的条目。我只在 Linux 上测试过,但应该也可以在 Mac 上工作。它应该在初始导出 PATH 之后添加。
export PATH=$(echo $PATH | awk -F: '
{ for (i = 1; i <= NF; i++) arr[$i]; }
END { for (i in arr) printf "%s:" , i; printf "\n"; } ')
答案4
git
未经认真初步检查就修改了您的安装.bash_profile
。此安装程序损坏了它(显然损坏了 12 次)。使用建议的处方皮疹,而只需定义一次正确的最小路径以将其包含回您的.bash_profile
.
你不需要在你的 中初始化你的 PATH .bashrc
。这个初始化脚本是为那些必须随着每个 shell 级别而改变的配置保留的,例如提示符、位置、颜色,但不是 PATH。