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:[EMAIL PROTECTED] > 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 [EMAIL PROTECTED] > with a subject of "unsubscribe". Trouble? Contact > [EMAIL PROTECTED] > > > -- > To UNSUBSCRIBE, email to [EMAIL PROTECTED] > with a subject of "unsubscribe". Trouble? Contact [EMAIL PROTECTED] > >
signature.asc
Description: Digital signature