我最近将这一行添加到我的.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
的最后一步
添加前检查
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 文件中使用它。