当我执行bash时,$ PATH不断重复

时间:2012-12-12 00:01:06

标签: linux bash

我在/ etc / bashrc中添加了以下条目(在Fedora上)。

#=========== Maven Related variables
export JAVA_HOME='/usr/java/default'
export PATH=${JAVA_HOME}:$PATH


#=========== Maven Related variables
export M2_HOME=/usr/local/apache-maven/apache-maven-3.0.4
export PATH=${M2_HOME}/bin:$PATH

#=========== Ant Related variables
export ANT_HOME=/usr/local/apache-ant
export Path=${ANT_HOME}/bin:$PATH

现在,每次执行bash命令刷新环境变量时,都会重复所有这些添加,并且PATH只是递归地添加自身;如果我继续做几十次bash,那么$ PATH会变成一百行重复的内容。我做错了什么?

请注意,我已将这些条目添加到/ etc / bashrc,因为无论我登录的用户是什么,我都希望在PATH中包含这些值。

谢谢, 香农

3 个答案:

答案 0 :(得分:4)

不要在.bashrc中逐步设置你的PATH;在.profile中设置一次,然后不管它。或者,既然你提到/etc/bashrc,就不要在/etc/bashrc中逐步设置PATH;在/etc/profile中设置一次,不管它。

一方利益;事情会更快一些。

另请参阅How do I manipulate PATH elements in shell scripts中的代码,了解清除重复路径的代码。

答案 1 :(得分:2)

如果通过这个声明:

  

...执行bash命令刷新环境变量......

你的意思是你要输入命令

bash

在命令提示符下,您不是“刷新环境变量”。您正在启动当前shell的新子shell。新shell继承了原始shell的路径,您再次向其添加内容。每次执行此操作时,PATH都会变长。

答案 2 :(得分:0)

您可以使用以下内容:

PATH=$(echo "$PATH" | awk -v RS=: -v ORS=: '!(a[$0]++)' | sed 's/:$//')

更改后清理路径。此外,由于在扫描路径时使用了第一个匹配,因此重复并不重要。