Linux 当我执行bash时,$PATH会不断重复自己

Linux 当我执行bash时,$PATH会不断重复自己,linux,bash,Linux,Bash,我在my/etc/bashrc(关于Fedora)中添加了如下条目 现在,每次我执行bash命令刷新环境变量时,所有这些添加都会重复,路径只是不断递归地添加自身;如果我继续做bash几十次,那么$PATH就会变成一百行重复内容。我做错了什么 请注意,我已将这些条目添加到/etc/bashrc,因为我希望无论以何种用户身份登录,都能在路径中包含这些值 谢谢, 香农不要在.bashrc中增量设置路径;在.profile中设置一次,然后将其单独放置。或者,既然您提到了/etc/bashrc,就不要在/

我在my/etc/bashrc(关于Fedora)中添加了如下条目

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

请注意,我已将这些条目添加到/etc/bashrc,因为我希望无论以何种用户身份登录,都能在路径中包含这些值

谢谢,
香农

不要在
.bashrc
中增量设置路径;在
.profile
中设置一次,然后将其单独放置。或者,既然您提到了
/etc/bashrc
,就不要在
/etc/bashrc
中递增地设置路径;在
/etc/profile
中设置一次,然后不使用它

一方利益;事情会进展得快一点


另请参见中的代码,以获取清除重复路径的代码。

不要在
.bashrc
中增量设置路径;在
.profile
中设置一次,然后将其单独放置。或者,既然您提到了
/etc/bashrc
,就不要在
/etc/bashrc
中递增地设置路径;在
/etc/profile
中设置一次,然后不使用它

一方利益;事情会进展得快一点

另请参见中的代码,以获取清除重复路径的代码。

如果通过以下语句:

。。。执行bash命令以刷新环境变量

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

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

如果通过以下语句:

。。。执行bash命令以刷新环境变量

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

bash

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

您可以使用以下方法:

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

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

您可以使用以下内容:

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

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

我也遇到了同样的问题(CentOS)。我就是这样修好的

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

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

    导出JAVA_HOME=/usr

    导出SHELL=/bin/bash

    # to run bash (because ksh was my default shell) #运行bash(因为ksh是我的默认shell) /bin/bash

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

  • 不更改/etc/profile
  • 对/etc/bashrc没有更改

  • 我也面临同样的问题(CentOS)。我就是这样修好的

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

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

    导出JAVA_HOME=/usr

    导出SHELL=/bin/bash

    # to run bash (because ksh was my default shell) #运行bash(因为ksh是我的默认shell) /bin/bash

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

  • 不更改/etc/profile
  • 对/etc/bashrc没有更改

  • “执行…以刷新环境变量”是什么命令?如果在PATH=赋值的值中包含$PATH var,则会发生这种情况。先前的内容会被带进来。如果您多次“源”配置文件,则var将累积。这不是特定于路径变量的事情;你可以用任何变量来尝试。我同意如果你在一条大线上管理你的路径,它会变得很烦人。但在您的情况下,只要找到路径的设置位置,然后向其中添加“${JAVA_HOME}:${M2_HOME}/bin:${ANT_HOME}”,就可以解决/避免这个问题。您“执行……刷新环境变量”的命令是什么?如果在PATH=assignment的值中包含$PATH变量,就会出现这种情况。先前的内容会被带进来。如果您多次“源”配置文件,则var将累积。这不是特定于路径变量的事情;你可以用任何变量来尝试。我同意如果你在一条大线上管理你的路径,它会变得很烦人。但在您的情况下,只要找到路径的设置位置,然后向其中添加“${JAVA_HOME}:${M2_HOME}/bin:${ANT_HOME}”,就可以解决/避免这个问题。FWIW,如果
    /etc/bashrc
    中的任何内容都不是即时的、无痛苦的,那么它就不属于那里。工作机器上的
    /etc/bashrc
    文件中的
    c**p
    (其中
    **
    表示“a”和“r”,我不是在讨论fish)不值得考虑;我不在办公室使用
    bash
    ,部分原因是我不希望他们对我胡说八道。(除其他事项外,它将我的
    umask
    从我想要的更改为他们认为更好的;我反对-他们的决定…不太可取!)更简单的是:使用/etc/profile设置真正只适用于单个用户的自定义设置是一种不好的做法。即使操作系统只承载一个用户,也是如此。特定用户的信息不属于/etc.FWIW,如果
    /etc/bashrc
    中的任何内容不是即时的、无痛苦的,那么它就不属于那里。工作机器上的
    /etc/bashrc
    文件中的
    c**p
    (其中
    **
    表示“a”和“r”,我不是在讨论fish)不值得考虑;我不在办公室使用
    bash
    ,部分原因是我不希望他们对我胡说八道。(除其他外,它将我的
    umask
    从我想要的更改为他们认为更好的