2

我在 /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 中拥有这些值。

谢谢,香农

4

4 回答 4

5

不要在.bashrc;中增量设置你的 PATH 。将其放入一次,.profile然后将其单独放置。或者,既然你提到/etc/bashrc了,不要在/etc/bashrc;中增量设置 PATH 。将其放入一次,/etc/profile然后不理会它。

一个附带的好处;事情会更快一点。

另请参阅如何在 shell 脚本中操作 PATH 元素中的代码,以获取用于清理重复 PATH 的代码。

于 2012-12-12T00:10:13.580 回答
2

如果通过这种说法:

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

你的意思是你正在输入命令

bash

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

于 2012-12-12T00:10:39.390 回答
0

你可以使用类似的东西:

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

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

于 2012-12-12T00:13:07.187 回答
0

我也遇到过同样的问题(CentOS)。这就是我修复它的方法。

  1. 将以下行添加到我的用户的 .profile

    导出 PATH=/usr/local/apache-maven-3.3.3/bin:$PATH

    导出 JAVA_HOME=/usr

    导出 SHELL=/bin/bash

    # 运行 bash(因为 ksh 是我的默认 shell)

    /bin/bash

  2. 我的用户的 .bashrc 文件没有更改

  3. /etc/profile 没有变化
  4. /etc/bashrc 没有变化
于 2017-05-11T15:01:09.737 回答