再问一个设置环境变量的简单问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
kingofnet
帖子: 15
注册时间: 2010-01-06 14:21

再问一个设置环境变量的简单问题

#1

帖子 kingofnet » 2010-01-26 11:51

想要在一个脚本里实现对环境变量PATH的修改,并即时生效,用了这样一段代码

代码: 全选

echo "PATH=$PATH:/home/bin">>/root/.bashrc
echo "export PATH">>/root/.bashrc
source /root/.bashrc
这样做内容是写进/root/.bashrc里了,但是没有即时生效
关闭这次会话后再重开一个ssh就可以了
把/root/.bashrc换成 /etc/profile效果也是一样的
比较奇怪的是同样的命令source /root/.bashrc,手动直接输入就能生效
想请教下大家应该怎么改
little_gg
帖子: 32
注册时间: 2008-01-29 9:09

Re: 再问一个设置环境变量的简单问题

#2

帖子 little_gg » 2010-01-26 11:59

你不执行怎么会加载呢
加载bash的时候会自动载入.bashrc配置的,否则只有source(或者.) .bashrc

PS:养成好习惯,bash的配置不要写到.profile里面去
kingofnet
帖子: 15
注册时间: 2010-01-06 14:21

Re: 再问一个设置环境变量的简单问题

#3

帖子 kingofnet » 2010-01-26 12:35

谢谢回答~解释下,这是个脚本文件

代码: 全选

#!/bin/bash
#shtest.sh
echo "PATH=$PATH:/home/bin">>/root/.bashrc
echo "export PATH">>/root/.bashrc
source /root/.bashrc
然后执行#./shtest.sh
我这样做的,然后#$PATH,里面没有想要添加的路径~
kingofnet
帖子: 15
注册时间: 2010-01-06 14:21

Re: 再问一个设置环境变量的简单问题

#4

帖子 kingofnet » 2010-01-26 12:39

或者是我把最后一句改成

代码: 全选

eval "source /root/.bashrc"
但是也没有用
little_gg
帖子: 32
注册时间: 2008-01-29 9:09

Re: 再问一个设置环境变量的简单问题

#5

帖子 little_gg » 2010-01-26 12:57

是这样的
你执行source的时候是处于你当前shell的子shell下,所以环境变量是对你这个子shell起作用了,而你当前shell必须退出才能读取到这个环境变量
你可以用exec shtest.sh来达到你的目的
我是这样理解的,如果有错误请指出
kingofnet
帖子: 15
注册时间: 2010-01-06 14:21

Re: 再问一个设置环境变量的简单问题

#6

帖子 kingofnet » 2010-01-26 13:41

little_gg 写了:是这样的
你执行source的时候是处于你当前shell的子shell下,所以环境变量是对你这个子shell起作用了,而你当前shell必须退出才能读取到这个环境变量
你可以用exec shtest.sh来达到你的目的
我是这样理解的,如果有错误请指出
谢谢回复!我也是这样理解的,但是改的是用户配置文件,应该是和shell无关的,只要用root登录都会生效的,事实是我重开一个ssh连接用root来登录就生效了,很奇怪
cosechy
帖子: 82
注册时间: 2008-03-06 4:56

Re: 再问一个设置环境变量的简单问题

#7

帖子 cosechy » 2010-02-06 19:17

配置文件是每次启动bash的时候处理的

建议把脚本改成bashrc里的函数,然后直接解决问题
回复