我最近将这一行添加到我的 .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 中没有重复项:
- 在添加之前检查一个目录是否已经存在于 PATH 中
- 在你的
.bashrc
中的最后一步去重 PATH>
添加前检查
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"
Dedupe(我在SO上找到的最好的方法)
PATH="$(perl -e 'print join(":", grep { not $seen{$_}++ } split(/:/, $ENV{PATH}))')"
另见 Unix & Linux/SuperUser StackExchange:
关于linux - 如何处理我的 PATH 变量中的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44232009/