export一个变量究竟发生了什么事情?

软件和网站开发以及相关技术探讨
回复
zouzhile
帖子: 36
注册时间: 2005-11-16 9:40

export一个变量究竟发生了什么事情?

#1

帖子 zouzhile »

大家好,我查了一下文档,说export是为了把一个变量变成一个global的变量,能够在不同的shell里面共享。我在配置环境的时候发现了一个有意思的事情:
我在/env/environment里面定义了两个变量A,B
A=/opt/a_dir
B=${A}/file1:${A}/file2
我发现我必须对A进行export,如果没有export,那么用echo ${B}返回的值是${A}/file1:${A}/file2,当然这个值是错的,程序找不到这个变量。如果export A,那么echo ${B}返回的值是/opt/a_dir/file1:/opt/a_dir/file1,这时就对了。
所以我很好奇到底export的时候发生什么事情,因为我重启系统以后export的效果还存在,即B是正确的,所以一定是把export的值写在哪里了,大侠们清指教。
头像
laborer
帖子: 1016
注册时间: 2005-10-25 11:15
联系:

#2

帖子 laborer »

/env/environment ?
你是指/etc/environment吗?这个地方应该只是用来配置LANG,LC_ALL,LC_CTYPE的地方,其它变量在这里定义应该无效。
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser
zouzhile
帖子: 36
注册时间: 2005-11-16 9:40

#3

帖子 zouzhile »

可是我定义的JAVA_HOME就有效了,jdk我是bin文件手动安装的。
不过export命令到底做了什么事情呢?
Kind Regards:)
Robin
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#4

帖子 eexpress »

我想是。一个配置被系统读到时,不会自动多次进行引用变量的多次刷新识别,这个和c的反编译思路是一样的。

配置文件一次读入时,当时第一个变量没有export到环境,那么读入第二个时,扫描环境变量,发现没有,当然不会自动认到。

要不你不可能让系统不断的重新配置环境变量吧。那样岂不是要一个daemon不断的监视环境变量的修改了。好智能哦。
● 鸣学
头像
laborer
帖子: 1016
注册时间: 2005-10-25 11:15
联系:

#5

帖子 laborer »

楼主,我试了一下,没有能重复出你说的现象,你能描述得详细一点吗?
hreiser@oakland:~$ killall -9 wife
police@oakland:~$ sudo find / -user hreiser
court@oakland:~$ sudo mv /home/hreiser /jail/
court@oakland:~$ sudo usermod -d /jail/hreiser -s "/usr/sbin/chroot /jail/" hreiser
kdekid
帖子: 32
注册时间: 2005-11-25 11:57

#6

帖子 kdekid »

在一个shell中,被export的变量可以以环境变量的形式传递到child process中。
苍紫云龙
帖子: 117
注册时间: 2005-07-27 18:39

Re: export一个变量究竟发生了什么事情?

#7

帖子 苍紫云龙 »

zouzhile 写了:大家好,我查了一下文档,说export是为了把一个变量变成一个global的变量,能够在不同的shell里面共享。我在配置环境的时候发现了一个有意思的事情:
我在/env/environment里面定义了两个变量A,B
A=/opt/a_dir
B=${A}/file1:${A}/file2
我发现我必须对A进行export,如果没有export,那么用echo ${B}返回的值是${A}/file1:${A}/file2,当然这个值是错的,程序找不到这个变量。如果export A,那么echo ${B}返回的值是/opt/a_dir/file1:/opt/a_dir/file1,这时就对了。
所以我很好奇到底export的时候发生什么事情,因为我重启系统以后export的效果还存在,即B是正确的,所以一定是把export的值写在哪里了,大侠们清指教。
是不是写到交换内存里了...
zouzhile
帖子: 36
注册时间: 2005-11-16 9:40

#8

帖子 zouzhile »

有意思的事情是,我重启了一下机子,然后java命令都可以正常用了,类也能执行了。而且以前export的变量的值在env命令里面也可以看到。
看来有必要好好查查文档了。
回复