$PATH 充满了重复项

Nic*_*lin 10 terminal bash environment-variables

我最近开始配置 OSX 10.7 环境进行开发。我已经安装了 HomeBrew,并将以下内容添加到我的.bash_profile

export PATH="/usr/local/bin:/usr/local/sbin:~/bin:$PATH"        
Run Code Online (Sandbox Code Playgroud)

一切都很好,除非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
Run Code Online (Sandbox Code Playgroud)

除了我的.bash_profile. 我配对这些重复项的最佳方法是什么?有没有办法找出哪些文件正在修改我的路径并尝试消除它们?

She*_*man 8

我从命令行运行了Ryan Thompson 的脚本
它为我删除了所有重复项,不更改顺序,也不留下尾随:

PATH="$(perl -e 'print join(":", grep { not $seen{$_}++ } split(/:/, $ENV{PATH}))')"
Run Code Online (Sandbox Code Playgroud)

除了方便高于1内胆,瑞安股(更结构化)脚本他在使用config删除重复的其他变量PATH

有关更多详细信息,请参阅他的 Unix 和 Linux 帖子


che*_*ner 7

发表评论后,这里有一些修剪建议$PATH

查看您的路径,似乎.bash_profile正在执行两次,或者在.bash_profile其他地方进行了重复。

'/usr/local/git/bin' 和 'use/local/bin' [原文如此] 有 7 个重复添加,然后是另外 5 个 '/usr/local/git/bin' 的副本。根据git安装方式,您可以向您的包管理器查询安装了哪些文件git;可能有一些配置文件或修改过的系统文件会影响PATH.

放在set -x的最顶部.bash_login,然后启动一个新的登录 shell。您应该获得大量输出,这些输出准确显示了bash启动时正在执行的操作,这应该可以帮助您找出PATH正在修改的位置。set -x一旦你弄清楚或放弃,你可以删除。如果你没有找到任何东西,你也可以将它添加到的开头/etc/profile来跟踪系统在.bash_profile处理你自己之前做了什么。