如何处理我的 PATH 变量中的重复项



我最近将这一行添加到我的.bashrc文件中,以便我可以从命令行使用java编译器javac(如果这有所作为,请使用MobaXTerm(

export PATH=$PATH:"/cygdrive/c/Program Files/Java/jdk1.8.0_101/bin"

但是我在$PATH变量中看到多个重复项(请注意,添加换行符只是为了可读性(

/bin:
/drives/c/Users/Justin/DOCUME~1/MobaXterm/slash/bin:
/drives/c/WINDOWS:
/drives/c/WINDOWS/system32:
/cygdrive/c/ProgramFiles/Java/jdk1.8.0_101/bin:
/cygdrive/c/ProgramFiles/Java/jdk1.8.0_101/bin:
/cygdrive/c/ProgramFiles/Java/jdk1.8.0_101/bin

我添加到$PATH的方式有问题吗?

如果 PATH 由 .bashrc 调用的不同脚本操作,这通常是结果。

虽然 PATH 中的重复项不是主要问题,但有两种方法可以使 PATH 免于重复

  1. 在添加之前检查 PATH 中是否已存在目录
  2. 重复数据删除路径作为.bashrc的最后一步

添加前检查

javabin="/cygdrive/c/ProgramFiles/Java/jdk1.8.0_101/bin"
if ! [[ $PATH =~ "$javabin" ]]; then
  PATH="$PATH:$javabin"
fi

或者写一个函数:

add_to_path() {
    local dir re
    for dir; do
        re="(^$dir:|:$dir:|:$dir$)"
        if ! [[ $PATH =~ $re ]]; then
            PATH="$PATH:$dir"
        fi
    done
}
add_to_path "/cygdrive/c/ProgramFiles/Java/jdk1.8.0_101/bin"

重复数据删除(我在SO上找到的最好的方法(

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

参见Unix和Linux/SuperUser StackExchange:

  • 路径填充了重复项
  • 使用 awk 命令删除重复的$PATH条目
  • 如何正确添加路径到路径?

在/etc/profile 中定义了一个名为 pathmunge 的函数:

pathmunge () {
    case ":${PATH}:" in
        *:"$1":*)
            ;;
        *)
            if [ "$2" = "after" ] ; then
                PATH=$PATH:$1
            else
                PATH=$1:$PATH
            fi
    esac
}

不幸的是,它在文件末尾也未设置。 但是,只需删除未设置的行,您就可以在 .bashrc 文件中使用它。

相关内容

  • 没有找到相关文章

最新更新