[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: export question



On Sat, Jan 06, 2007 at 10:06:02PM -0500, Tony Heal wrote:
> Here is the problem. What you suggest will place the variable in the
> environment, but that is what export is supposed to do.
> 
> >From the man for bash
> export [-fn] [name[=word]] ...
> export -p
>     The supplied names are marked for automatic export to the environment of
> subsequently executed commands.
> 
> Export should allow me to use the variable in other scripts, but it does not
> seem to be doing what it does if used in the profile.
> 
> That is what I am confused about.

its all about variable scope. 

look at this crappy diagram

bash1--\
	|
	-- export JAVA
	|
	-- ./myscript--/bin/sh--\
				| 
				-- bash2--\
					  |
					  -- export Java

when you export JAVA in bash1, anything subsequent that you do in
bash1 can see $JAVA. when you execute ./myscript, it spawns a new
shell, bash2. the export of $JAVA in bash2 is totally visible to
anything in bash2, but when that script dies, then bash2 dies and
takes all its variables with it.

at least that's how I understand it. when you source the file '.' as
you've been told, the diagram looks like this.

bash1--\
	|
	-- export JAVA
	|
	-- .  ./myscript -- export Java


the script doesn't spawn a new shell so the export command is executed
within bash1. when bash1 is exited at some point, then $JAVA will dies
with it. 

hth

A

> 
> Tony
> 
> 
> 
> -----Original Message-----
> From: Mike McCarty [mailto:Mike.McCarty@sbcglobal.net] 
> Sent: Saturday, January 06, 2007 9:22 PM
> To: debian-user@lists.debian.org
> Subject: Re: export question
> 
> Tony Heal wrote:
> > Maybe I am looking for something I should not see, but if 'export' places
> a
> > variable in the environment shouldn't I be able to see it when using the
> > 'set' command. I wrote this small script to test this and nothing shows in
> > set. I know I am missing something. If I had the same lines into
> > /etc/profile when I log in I see JAVA_HOME in set.
> > 
> >  
> > 
> > #!/bin/sh
> > 
> >  
> > 
> > JAVA_HOME='/usr/java/j2re1.4.2_03'
> > 
> > export JAVA_HOME
> 
> 
> It *is* set in the sub-process created when you run the script.
> But that exits. If you execute the shell script in your current
> shell, then it will work. For that you use the '.' command. Like
> this...
> 
> $ cat set_java.sh
> #!/bin/sh
> JAVA_HOME='/usr/java/j2re1.4.2_03'
> export JAVA_HOME
> 
> $ ./set_java.sh
> 
> $ set | grep JAVA
> 
> $ . set_java.sh
> 
> $ set | grep JAVA
> 
> JAVA_HOME=/usr/java/j2re1.4.2_03
> 
> $
> 
> I added spaces to make it easier to read.
> 
> Mike
> -- 
> p="p=%c%s%c;main(){printf(p,34,p,34);}";main(){printf(p,34,p,34);}
> This message made from 100% recycled bits.
> You have found the bank of Larn.
> I can explain it for you, but I can't understand it for you.
> I speak only for myself, and I am unanimous in that!
> 
> 
> -- 
> To UNSUBSCRIBE, email to debian-user-REQUEST@lists.debian.org 
> with a subject of "unsubscribe". Trouble? Contact
> listmaster@lists.debian.org
> 
> 
> -- 
> To UNSUBSCRIBE, email to debian-user-REQUEST@lists.debian.org 
> with a subject of "unsubscribe". Trouble? Contact listmaster@lists.debian.org
> 
> 

Attachment: signature.asc
Description: Digital signature


Reply to: