我最近将这一行添加到我的.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
的方式有什么问题吗?
答案 0 :(得分:3)
如果PATH由.bashrc
调用的不同脚本操纵,通常就是结果。
虽然PATH中的重复项不是主要问题,但有两种方法可以使PATH不受其影响:
.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:
答案 1 :(得分:0)
在/ etc / profile中定义了一个名为pathmunge的函数:
pathmunge () {
case ":${PATH}:" in
*:"$1":*)
;;
*)
if [ "$2" = "after" ] ; then
PATH=$PATH:$1
else
PATH=$1:$PATH
fi
esac
}
不幸的是,它在文件末尾也没有设置。但是,只需删除未设置的行,就可以在.bashrc文件中使用它。