LinuxSir.cn,穿越时空的Linuxsir!

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

无法用脚本设置PATH变量?[已解决]

[复制链接]
发表于 2004-2-24 12:09:36 | 显示全部楼层 |阅读模式
我在Debian Woody/RH7.3都尝试过用一个脚本设置我需要的环境变量如下:


  1. #!/bin/sh
  2. #this is the file /root/setpath

  3. PATH=/usr/local/devkit/bin:$PATH
  4. export PATH

复制代码


但是我用~/setpath或者sh ~/setpath都无法看到我所期待的结果。甚至我在debian系统中改动/etc/profile中的path设置都无效。只有当我使用
$ source ~/setpath
的时候,变量才被正确设置。

请问这是为什么?如何解决?谢谢!
发表于 2004-2-24 12:28:11 | 显示全部楼层

回复: 无法用脚本设置PATH变量?

最初由 feng_ye 发表
我在Debian Woody/RH7.3都尝试过用一个脚本设置我需要的环境变量如下:


  1. #!/bin/sh
  2. #this is the file /root/setpath

  3. PATH=/usr/local/devkit/bin:$PATH
  4. export PATH

复制代码


但是我用~/setpath或者sh ~/setpath都无法看到我所期待的结果。甚至我在debian系统中改动/etc/profile中的path设置都无效。只有当我使用
$ source ~/setpath
的时候,变量才被正确设置。

请问这是为什么?如何解决?谢谢!

运行一个脚本时,shell会开启一个子shell来运行它,所有在子shell里的环境变量都是局部的,只能在子shell中可见;在子shell中export就是使环境变量对本身的子shell可见。作为父shell,当然对脚本里的PATH不可知。
而source在当前shell执行文本中包含的命令,故环境变量作用于当前shell。
由于profile是shell的全局登录配置文件,在/etc/profile里修改PATH,就应该在登录时才产生变化;而我们平时在x里打开的都是交互shell而非登录shell,当然修改就不能马上生效。当然,我们也可以修改xterm的属性,使之作为登录shell。
 楼主| 发表于 2004-2-24 12:45:28 | 显示全部楼层
原来如此。学习了一把,谢谢!

那是不是这样理解:如果要在脚本中设置PATH,就一定要用source来运行?

至于在/etc/profile中的修改我再回去看看,可能时我自己的问题。
发表于 2004-2-24 12:49:58 | 显示全部楼层
最初由 feng_ye 发表
原来如此。学习了一把,谢谢!

那是不是这样理解:如果要在脚本中设置PATH,就一定要用source来运行?

至于在/etc/profile中的修改我再回去看看,可能时我自己的问题。

很少要设置PATH啊。这些都是系统启动配置文件如/etc/profile的工作。
我们在脚本中搞这个干吗?
当然,若以便于调试脚本为出发点,我们可以在~/.bashrc里设置PATH,加上自己的脚本目录啊。fedora在profile里有个函数

  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. }
复制代码

可以设置路径。调用那个函数把自己的路径加在PATH的末尾即可。
 楼主| 发表于 2004-2-24 13:20:42 | 显示全部楼层
明白了。非常感谢!
发表于 2004-2-24 18:08:29 | 显示全部楼层
应该说修改 PATH 变量还是很有必要的: 我要把自己的 bin 目录加进去, 许多人还喜欢把 . 加进 PATH, 免得每次都要敲 ./
发表于 2004-2-24 22:40:46 | 显示全部楼层
最初由 dearvoid 发表
应该说修改 PATH 变量还是很有必要的: 我要把自己的 bin 目录加进去, 许多人还喜欢把 . 加进 PATH, 免得每次都要敲 ./

可以把下句加到你profile配置中
export PATH=${PATH}:~/myshell
 楼主| 发表于 2004-2-24 23:27:44 | 显示全部楼层
各位,我用的Debian系统,在/etc/profile中的改动和设置path似乎都无效,有没有人在debian上碰到这样的情况?
发表于 2004-2-24 23:33:17 | 显示全部楼层
最初由 feng_ye 发表
各位,我用的Debian系统,在/etc/profile中的改动和设置path似乎都无效,有没有人在debian上碰到这样的情况?

修改完profile文件后,立即生效的用:
. /etc/profile
or
source /etc/profile
看是否可以!
 楼主| 发表于 2004-2-25 10:44:58 | 显示全部楼层
打source /etc/profile当然可以设置,但是无法自动在登陆/启动时设置啊。

我找到一个办法,在~/.profile中设置PATH,证实这是可行的。

是不是一些安全原因导致了Debian在PATH设置中出现这样的行为?(/etc/profile无法自动生效)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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