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