分页: 1 / 1

rc.local 与 profile

发表于 : 2008-01-17 0:14
liangxgz
这2个文件经常混淆我. 根据以往的经验.
rc.local是系统启动的时候会执行.profile用户登陆的时候执行.换句话说.如果系统如果没有用户登陆profile中的设置就不会生效.就算是用户登陆了.也只是影响到登陆用户的那个会话.而不会影响到系统的整个环境.

我的问题:
我在rc.local中设置了以下命令

代码: 全选

PATH=$PATH:/opt/java/jdk1.6.0_03/bin
JAVA_HOME=/opt/java/jdk1.6.0_03
export PATH
export JAVA_HOME
但是我在用户登陆的会话中并没有看到这些设置生效.
环境: ubuntu desktop 7.10
有人能介绍一些有关这方面的资源吗?或者解释一下这2个文件的启动顺序.

谢谢!

发表于 : 2008-01-18 15:32
madoldman
首先你应该弄清楚rc.local是干什么的,它不过是系统启动的时候自动运行的一个脚本而已
也就是说,和你手工运行一个脚本是没有什么区别的,那请问,如果你写如下一个shell:
PATH=$PATH:yourpath
export PATH
姑且命名为a.sh,然后用./a.sh,执行后你的PATH变了吗?
没有,因为在执行a.sh的时候,系统新开了一个进程,然后把PATH改掉了,然后这个进程
退出了。它的父进程,也就是执行这个脚本的终端进程的环境变量并没有修改。
那如何修改终端进程的环境变量呢?很简单source a.sh或者. a.sh注意,.和a.sh中间有一个空格
通过source命令,让a.sh在当前进程里执行,当前终端的PATH被改掉了。
写在profile或者写在bashrc里面的东西,在shell启动的时候就是以在当前进程中运行的这种方式加载
进来的。

发表于 : 2008-01-18 15:38
madoldman
也就是说,子进程会继承父进程的环境变量,但是在子进程里做的修改,并不会影响到父进程。

发表于 : 2008-01-18 17:02
Nile
路过学习一下

发表于 : 2008-01-18 18:15
aBiNg
疯老头,好久不见了哦。 :lol:

发表于 : 2008-01-19 9:31
madoldman
哦,楼上的认识我?嗯,忙了,没多少时间可以逛论坛了

发表于 : 2008-01-19 11:39
liangxgz
明白了!
我之前看到profile里面的路径设置,以为照抄就可以.现在才明白我对rc.local的理解错误.
就是说,如果我有些守护进程要系统启动的时候运行.相关的环境参数直接在守护进程的启动script里面写就可以了不必要直接写在rc.local. 我的理解没错把!

发表于 : 2008-01-19 15:38
madoldman
如果只是某个守护进程要用的环境变量,当然直接写在这个进程的启动脚本里就可以了。而且环境变量写在rc.local里也没什么意义阿

Re: rc.local 与 profile

发表于 : 2009-04-27 10:53
Final_x
路过``
刚好用到 :em05
一个不小心学习了下