2012-08-01 85 views
0

我正在使用knoppix 7.0.3并尝试设置PATH环境变量。根据官方的Unbuntu文档,/ etc/enviroment应该是最好的地方。因此,我增加了文件中的这些行:如何在Knoppix中设置PATH?

JAVA_HOME="/usr/lib/jvm/java-6-sun" 
GRAILS_HOME="/home/knoppix/grails" 
PATH="${PATH}:${JAVA_HOME}/bin:${GRAILS_HOME}/bin" 

但重新启动系统后,该文件只是恢复到一部开拓创新一个(我用的是持久存储)。 那么一些谷歌搜索后,我尝试编辑〜/ .profile文件是这样的:

export JAVA_HOME="/usr/lib/jvm/java-6-sun" 
export GRAILS_HOME="/home/knoppix/grails" 
export PATH=$PATH:$JAVA_HOME/bin:$GRAILS_HOME/bin 

这个时候,前两个变量得到了设置(在控制台呼应),但路径没有。当我回应时,它仍然是默认的一个。怎么了?

+0

如果你写的'出口PATH = $ PATH会发生什么:$ GRAILS_HOME /直接在控制台和'后回声$ PATH'权bin':/ bin中$ JAVA_HOME它?你看到'PATH'的值是否正确? – Shahbaz 2012-08-01 14:01:59

+0

@Shahbaz是的,如果只是将它导出到同一个控制台中,我可以看到PATH值。 – FloatingYeti 2012-08-01 14:07:19

+0

现在好了,关闭控制台,然后打开另一个('PATH'现在应该重置)。试试'source〜/ .profile'。你是否希望获得'PATH'的价值? – Shahbaz 2012-08-01 14:08:44

回答

0

问题是你的PATH在bash初始化过程中被覆盖,在.profile之后。

the manpage of bash来自:

当bash被调用以交互登录壳,或作为非交互式壳与--login选项,它首先从文件/ etc /简档读取并执行的命令,如果该文件存在。读取该文件后,它会按照该顺序查找〜/ .bash_profile,〜/ .bash_login和〜/ .profile,并从第一个存在且可读的命令读取和执行命令。当shell开始禁止这种行为时,可以使用--noprofile选项。

...

当一个交互的shell但不是登录shell启动时,bash从中读取〜/ .bashrc中执行命令,如果该文件存在。这可以通过使用--norc选项来禁止。 --rcfile文件选项将强制bash从文件读取并执行命令,而不是〜/ .bashrc。

根据您的经验,很显然,如果.bashrc不存在时,bash试图设置PATH为默认值(如果有人证实了这一点我将不胜感激)。

正如我们在您的问题的评论中所讨论的那样,将export命令添加到.bashrc(并因此创建该文件)解决了该问题。或者,您可以添加

source ~/.profile 

到您的.bashrc文件的结尾以获得相同的效果。

1

以下行修改/etc/profile

PATH=".:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"