+ -
当前位置:首页 → 问答吧 → 请教,无法在脚本中export系统环境变量的吗?

请教,无法在脚本中export系统环境变量的吗?

时间:2011-05-03

来源:互联网

本帖最后由 captivated 于 2011-05-03 20:33 编辑

RT。

比如我写了个脚本叫envset.sh, 想用它来set一些当前用户的系统环境变量。

我们登录入的那个终端是login shell,当运行envset.sh时,将会启动一个subshell来运行这个脚本。subshell是login shell fork出来的子进程。
subshell export的环境变量可以影响到它的子进程;但是却无法改变其父进程的环境变量,是这样对吗?

那么也就是说,如果我要改变当前用户的系统环境变量 -- 我无法通过执行一个脚本来做到这一点对吗?

当然,也许改变/etc/profile或者~/.bash_profile是能够做到改变用户的系统环境变量的? -- 可以吗?
即使可以通过/etc/profile或者~/.bash_profile这样的东西来改变系统环境变量,我也不想那么做 -- 因为我只是在某些时候想要设置它们而已。

这莫非意味着:一旦我要设置当前进程 -- 即login shell进程的环境变量,我就必须得在命令行一个一个的set?
如果我要set的环境变量有好几个甚至超过十个怎么办? ...
要命的是 -- 一旦登出login shell,其环境变量设置就不能再在另一个session使用了对吧?... 每次启动一个session就是launch一个login shell进程吧?
那么我每次启动一个新的session都要在命令行手动export环境变量?...

有没有能够通过执行脚本来改变系统环境变量的做法?有就最好了!
确实没有吗?好吧...那我应该改那个配置文件(/etc/profile之类的)比较好呢?/etc/profile我没权限改。当前用户的配置文件,改哪一个比较好点?
-- 我希望启动新的session时不需要 $ . ~/.xxxx 这样...

请达人指教~~~~~~~

作者: captivated   发布时间: 2011-05-03

居然没人顶... 没天理啊 自己顶一个

作者: captivated   发布时间: 2011-05-04

  1. . /tmp/envset.sh
复制代码

作者: Shell_HAT   发布时间: 2011-05-04

当然无法通过这点改变其父进程的环境变量,基因只可能由父亲遗传给子女,不可能由子女传给父亲,一样的道理
子shell自然无法做到了.
不过你可以用source命令,它是把其作为自身执行的一部分

作者: cjaizss   发布时间: 2011-05-04



QUOTE:
当然无法通过这点改变其父进程的环境变量,基因只可能由父亲遗传给子女,不可能由子女传给父亲,一样的道理
子 ...
cjaizss 发表于 2011-05-04 09:02




    哦...原来是这样... 我一直不知道source命令和一般的执行脚本有什么差别... 多谢了!

作者: captivated   发布时间: 2011-05-04

惭愧啊...

一直在用souce...

只知道有的时候应该用source...

竟然是在自己碰到这个问题之后才真正明白source和一般执行脚本的差别...

太惭愧了... 俺面壁去...

作者: captivated   发布时间: 2011-05-04

修行靠自己,十三问里面讲得很清楚了。

作者: zooyo   发布时间: 2011-05-04



QUOTE:
惭愧啊...

一直在用souce...

只知道有的时候应该用source...

竟然是在自己碰到这个问题之后才真正 ...
captivated 发表于 2011-05-04 09:20




    source的作用就在于把另外一个文件当成本身shell一部分来执行,区别于子shell,所以,既然是自身的一部分,source一个文件,里面所修改的任何shell变量都是自身的变量了

作者: cjaizss   发布时间: 2011-05-04