LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 946|回复: 11

请教rh9.0中PATH环境变量的问题

[复制链接]
发表于 2004-12-29 16:22:26 | 显示全部楼层 |阅读模式
我在/etc/profile中,找到了PATH的定义,但并不完全
  1. pathmunge () {
  2.         if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
  3.            if [ "$2" = "after" ] ; then
  4.               PATH=$PATH:$1
  5.            else
  6.               PATH=$1:$PATH
  7.            fi
  8.         fi
  9. }

  10. # Path manipulation
  11. if [ `id -u` = 0 ]; then
  12.         pathmunge /sbin
  13.         pathmunge /usr/sbin
  14.         pathmunge /usr/local/sbin
  15. fi

  16. pathmunge /usr/X11R6/bin after

  17. unset pathmunge
复制代码

请问PATH的最初定义在哪里?
而且有一点我十分不解。当我以普通用户登陆shell时,PATH的值为
/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/home/tintin/bin
我想PATH变量在运行/etc/profile之前的值应该是/usr/local/bin:/usr/bin:/bin。
根据这个结论和上面的代码,我想root用户登陆时,PATH的值应该是
/usr/local/sbin:/usr/sbin:/sbin:/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/root/bin
但结果却是/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
根据pathmunge函数的执行顺序应该是依次执行pathmunge /sbin,pathmunge /usr/sbin,
pathmunge /usr/local/sbin,但是结果却是交叉的。请问为什么会这样?谢谢。
发表于 2004-12-29 17:47:04 | 显示全部楼层
我曾经在一本很老的书上看过对于登录的初始化脚本的执行有一个执行顺序:
对主目录下没有初始脚本的用户,以/etc/profile来始初化运行环境,若有,以用户为准。

上面还是否有用不能肯定,我晚上仔细看一下,我用的也是rh9.0
 楼主| 发表于 2004-12-29 17:54:04 | 显示全部楼层
谢谢。我也去查查资料
发表于 2004-12-30 11:34:05 | 显示全部楼层
我仔细找了一下,在rh9里PATH的值是由/etc/profile还有/etc/profile.d目录下的脚本,再加上/etc/bashrc和/etc/bash_profile构成的。(我用的是bash shell)
 楼主| 发表于 2004-12-30 13:36:50 | 显示全部楼层
Post by kiron
我仔细找了一下,在rh9里PATH的值是由/etc/profile还有/etc/profile.d目录下的脚本,再加上/etc/bashrc和/etc/bash_profile构成的。(我用的是bash shell)

我也找了一下,但没有在/etc/profile.d目录下的脚本发现定义过PATH,而且我没有/etc/bash_profile文件。只有/etc/bashrc。还是不解。我用的也是bash。谢谢回复。
 楼主| 发表于 2004-12-30 16:19:58 | 显示全部楼层
这可能跟内核有关了。
发表于 2004-12-30 16:51:41 | 显示全部楼层
不好意思,打错了,是~/.bash_profile
有赋值的,下面命令的输出
#cat /etc/profile.d/*|grep 'PATH'
if ! echo ${PATH} | grep -q /usr/kerberos/bin ; then
        PATH=/usr/kerberos/bin{PATH}
if ! echo ${PATH} | grep -q /usr/kerberos/sbin ; then
                PATH=/usr/kerberos/sbin{PATH}

ps:不可能和内核有关的,内核里没有环境变量这个概念
发表于 2004-12-30 17:13:38 | 显示全部楼层
看看在/etc/rc.d/rc.sysinit
PATH路径首先是在这里的定义的吧
 楼主| 发表于 2004-12-30 19:58:26 | 显示全部楼层
在/etc/rc.d/init.d/autofs中有
PATH=/sbin:/usr/sbin:/bin:/usr/bin
export PATH
 楼主| 发表于 2004-12-30 20:17:04 | 显示全部楼层
我想应该是在/etc/rc.d/rcN下的脚本定义的。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表