× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



java400-l-bounces@xxxxxxxxxxxx wrote on 09/16/2005 11:50:45 AM:

> In conjunction with trying Hibernate and Spring, we have some very long
> classpaths.
> We have tried to set up QShell scripts that we can run to set the
> classpath for different situations.

I've got good news and bad news:

Bad news: It will never work to run a "script" to set environment
variables, since a called shell script can never change its caller's
environment.

Good news: What does work is called "sourcing" a file, where the
shell effectively runs each line of the file as if it were
entered by hand in the current shell.

To source a file in QShell, use the dot.  If you have a file
'setVars' containing your export commands you could do:
   . setVars
..at the command prompt to set those variables in the current shell.

Here's a shell session that might help -- I added the line numbers
for clarity's sake.

        1 > set | grep FOOBAR
        2   $
        3 > cat setVars
        4   export FOOBAR=BAZ
        5   $
        6 > setVars
        7   $
        8 > set | grep FOOBAR
        9   $
       10 > . setVars
       11   $
       12 > set | grep FOOBAR
       13   FOOBAR=BAZ
       14   $

   Line 1 calls the 'set' command, which dumps all current
   variables, and the grep looks for the one I want to set: FOOBAR.
   The lack of any output in line 2 shows that FOOBAR is not set.

   I built a little file called 'setVars' that contains one line
   (line 4).

   On line 6 I try running setVars as a script, and then
   check again -- line 9 shows the export didn't work.

   On line 10 I source the setVars file, and check again -- now
   the variable is set (line 13) and we're off to the races.

Now the importance of using 'export' becomes pertinent when you
talk about calling 'child' scripts.  When you just say
      FOO=BAR
you set a local variable that is not passed to child shells.
By adding the 'export' command you ensure the child shells
can see the variable.

Here's another little shell session:

        1 > cat setVars
        2   export FOOBAR=BAZ
        3   BAZ=BONK
        4   $
        5 > . setVars
        6   $
        7 > set | grep BAZ
        8   BAZ=BONK
        9   FOOBAR=BAZ
       10   $
       11 > qsh
       12   $
       13 > set | grep BAZ
       14   FOOBAR=BAZ
       15   $

   I added (line 3) to setVars to set a local
   variable called BAZ.  After sourcing setVars, both
   variables are set (lines 8 and 9).  However,
   when I start a new shell on line 11 and check
   again, only FOOBAR is set, showing that BAZ=BONK was
   local to the first shell.

> A script may consist of a single line like:
> export -s CLASSPATH='.:/java/lib/jt400.jar:java/lib/utility.jar'

Just try 'dotting' (sourcing) these files -- I think you'll be pleased.

> If we enter the export command directly in QShell it works.  If we run
> it in a script it does not work.
> It acts like all variables are local to the script and can not be
> exported.

Exactly correct.  It's a sort of fundamental tenet of UNIX
shell scripting that you cannot change your _caller's_ environment:
only your own and those of your own children.

HTH.

-blair


  ___   _           Blair Wyman                  IBM Rochester
 ( /_)  /  _  ' _   (507)253-2891            blairw@xxxxxxxxxx
__/__)_/_<_/_/_/_'  Opinions expressed may not be those of IBM




As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.