我在/ etc / bashrc中添加了以下条目(在Fedora上)。
#=========== Maven Related variables
export JAVA_HOME='/usr/java/default'
export PATH=${JAVA_HOME}:$PATH
#=========== Maven Related variables
export M2_HOME=/usr/local/apache-maven/apache-maven-3.0.4
export PATH=${M2_HOME}/bin:$PATH
#=========== Ant Related variables
export ANT_HOME=/usr/local/apache-ant
export Path=${ANT_HOME}/bin:$PATH
现在,每次执行bash命令刷新环境变量时,都会重复所有这些添加,并且PATH只是递归地添加自身;如果我继续做几十次bash,那么$ PATH会变成一百行重复的内容。我做错了什么?
请注意,我已将这些条目添加到/ etc / bashrc,因为无论我登录的用户是什么,我都希望在PATH中包含这些值。
谢谢, 香农
答案 0 :(得分:4)
不要在.bashrc
中逐步设置你的PATH;在.profile
中设置一次,然后不管它。或者,既然你提到/etc/bashrc
,就不要在/etc/bashrc
中逐步设置PATH;在/etc/profile
中设置一次,不管它。
一方利益;事情会更快一些。
另请参阅How do I manipulate PATH elements in shell scripts中的代码,了解清除重复路径的代码。
答案 1 :(得分:2)
如果通过这个声明:
...执行bash命令刷新环境变量......
你的意思是你要输入命令
bash
在命令提示符下,您不是“刷新环境变量”。您正在启动当前shell的新子shell。新shell继承了原始shell的路径,您再次向其添加内容。每次执行此操作时,PATH都会变长。
答案 2 :(得分:0)
您可以使用以下内容:
PATH=$(echo "$PATH" | awk -v RS=: -v ORS=: '!(a[$0]++)' | sed 's/:$//')
更改后清理路径。此外,由于在扫描路径时使用了第一个匹配,因此重复并不重要。