Environment variables in Workspace
Rob Warnock
rpw3 at rigden.wpd.sgi.com
Wed Jul 18 14:07:04 AEST 1990
In article <64370 at sgi.sgi.com> betsy at vesuvius.UUCP (Betsy Zeller) writes:
+---------------
| martin at zoo.toronto.edu (Martin Hofmann) writes:
| >The default setup on our system is for Workspace to run at login time.
| >It appears that Workspace is run before .cshrc and thus all environment
| >variables that are set in .cshrc are ignored by Workspace...
| If you run the User Tool from the System Administration tool, open the icon
| representing your account, and set WorkSpace 'on' by clicking that button,
| WorkSpace will automatically start up each time you start up the system.
| Both your .login and .cshrc variables will be exported to the NeWS
| environment before WorkSpace is started.
+---------------
In case Betsy's suggestion doesn't fix it, here are some additional things
that can cause trouble. [Note: I am not a developer of WorkSpace or the
window system, just a user who has bumped into similar difficulties before.]
1. As things are coming up, in "init.ps" the routine "basicRestartActions"
runs "establishEnvironment" before anything else, including "autoWorkSpace".
It is "establishEnvironment" which sucks your environment variables up into
the NeWS server (from your .login and .cshrc). The "basicRestartActions"
routine also starts up the standard set of toolchests. A common thing for
users to do is to redefine "basicRestartActions" to be empty, and do the
whole thing from "RestartActions" in their "~/user.ps" file, so they can
reconfigure the order of the toolchests, etc. If you have changed either
"RestartActions" or "basicRestartActions" in this way, make sure that
"establishEnvironment" is still run before anything else, or your
environment variables will not get defined. (Once a toolchest -- or
anything else, for that matter -- has been forked, there is no way to
communicate environment changes to it.)
2. The method "establishEnvironment" uses to get your environment variables
(a program called "exporttonews") can be confused by spurious output during
the execution of your .cshrc or .login files, possibly leading to some of
your environment variables not being passed back up to the NeWS server
correctly (and thus not ever getting passed down to WorkSpace). There is
a way for your .cshrc/.login files to know when they are being called by
"exporttonews", so they can 'be quiet': "exporttonews" defines the
environment variable "ENVONLY". Thus, if you put any commands which
might do output inside a negative test for "ENVONLY" being defined,
things may improve. For example:
if( ! $?ENVONLY )then # avoid confusing "exporttonews"
stty line 1 erase '^H' kill '^U' intr '^C' echoe
eval `tset -s -Q`
setenv TTY `tty`
endif
Note that any program that requires a "tty" on its stdin/stdout/stderr is
likely to generate an error message when run from "exporttonews", and thus
should be 'protected' by such a test of "ENVONLY".
3. There was a bug in the 3.2 version of the NeWS server (fixed in 3.3) which
could lose a bunch of environment variables in the server (and thus in any
program it forked, such as WorkSpace) if an environment variable was defined
whose name was a leading prefix of the name of a variable already defined.
For example, if "EDITOR" were already defined, then defining "EDIT" could
corrupt the environment. You can work around this one by putting the defines
for one the conflicting variables (either the long one or the short one)
inside a conditional test for $ENVONLY, as shown in #2. [Of course, the
workaround is not perfect. Any variables you so shield will not be available
from within WorkSpace or programs run from WorkSpace.]
You can debug these environment variable problems by putting the following
code at the beginning of your .login, then logging out and back in again:
# debug NeWS environment
if( $?ENVONLY )then
/bin/env > ENV.initial
else
/bin/env > ENV.news
endif
[This assumes that you define no environment variables in .cshrc. If you do,
a more complicated procedure is necessary to prevent overwriting the capture
files at the wrong time. I leave that as an "exercise for the reader".] After
you are logged in again, run the command:
/bin/env > ENV.wsh
Now, the file "ENV.initial" will show you what the environment was just
as "exporttonews" was about to get your environment variables; "ENV.news"
will show what it was after "exporttonews" but before any changes made
during your .login processing; and "ENV.wsh" will show you what you've
got now. The variables defined in "ENV.news" are the ones which programs
run directly from the NeWS server (such as WorkSpace, if it's autostart'd)
will inherit. If there are any significant differences between "ENV.news"
and "ENV.wsh" (other than perhaps "$TTY"), then you probably have one or
more of the above problems.
The reason you don't see the problem(s) when you run WorkSpace manually
from "wsh" is that by then your environment has been fixed up again by your
.cshrc/.login being run a second time as "csh" was coming up inside the "wsh".
(Actually, they're run once for each "wsh/csh" window you have.) And "csh"
doesn't have any of the above problems.
Hope this helps,
-Rob
-----
Rob Warnock, MS-9U/510 rpw3 at sgi.com rpw3 at pei.com
Silicon Graphics, Inc. (415)335-1673 Protocol Engines, Inc.
2011 N. Shoreline Blvd.
Mountain View, CA 94039-7311
More information about the Comp.sys.sgi
mailing list