TERM env.var. in Unix: Why can't I modify it ?

Ole Nomann Thomsen nomann at rimfaxe.diku.dk
Tue Jul 3 19:48:11 AEST 1990


Recently I posted this question in comp.unix.questions, but got only one
answer. (This was to "look in /etc/TIMEZONE", which was useful, although 
not sufficient. Thanks to the answerer, sorry I mislaid you name).

Now, I have collected some more data on the problem, which enables me to
describe it more thoroughly (I hope :-).

The system is unix rel. 3.2 vers. 2.1 machine: i386, and I use a csh.

The problem is this:

When I log in from a network-terminal, I get an env. variable, TERM,
that is set to unknown. I cannot change this value to something sensible
since "setenv" doesn't overwrite the existing TERM, but rather creates a
new one, so that I now have two "TERM" env.var.s (and all the applications
can only see the wrong one, surprise surprise).

The problem stems from the program /bin/netlogin. I know this, because I
patched this binary to set an env.var. call "LERM" instead of "TERM". This
results in that I have an immortal env.var.: LERM=unknown, which I can live
with, although it still bothers me (not a pain but an itch).

My questions are:

1. Why (and how) does /bin/netlogin set an immortal env.var., and is it
   harmful to remove it like I did. ?

2. Why can't csh overwrite the TERM=unknown env., (with setenv) when Bourne-
   shell can (with export) ?

To clarify, I include an example run. This is made with the modified
/bin/netlogin, so the problem env.var. is now "LERM".

# This is my unmodified env. notice the unknown "LERM"
#
4% env
HOME=/usr/nomann
PATH=:/bin:/usr/bin:/usr/local/bin:/usr/nomann/bin
LOGNAME=nomann
LERM=unknown
HZ=100
TZ=MET-1MED-2;85/2:00:00,274/2:00:00
DNPRINT=lp -dprinter3
TERM=adm12
#
# I now set LERM to "foo". Notice its absence in the env.
#
5% setenv LERM foo
6% env
HOME=/usr/nomann
PATH=:/bin:/usr/bin:/usr/local/bin:/usr/nomann/bin
LOGNAME=nomann
LERM=unknown
HZ=100
TZ=MET-1MED-2;85/2:00:00,274/2:00:00
DNPRINT=lp -dprinter3
TERM=adm12
#
# "g" is a program that prints the environment, using:
# main(argc, argv, envp) char **envp, **argv;
# and so on.
# notice the two "LERM"s, where the first one is "foo".
#
7% g
HOME=/usr/nomann
PATH=:/bin:/usr/bin:/usr/local/bin:/usr/nomann/bin
LOGNAME=nomann
LERM=foo
HZ=100
TZ=MET-1MED-2;85/2:00:00,274/2:00:00
LERM=unknown
DNPRINT=lp -dprinter3
TERM=adm12
adm12
======================================================================

Now, the most useful behavior of setenv would be to overwrite the 
second instance of "LERM", so that env would see that one. Can anybody
tell me how I can get it to do that ?

PS: Sorry if "LERM" is a rude word in some language (it does sound so :-)/2.



- Ole. (nomann at diku.dk).

"Information is not knowledge" - Frank Zappa. 



More information about the Comp.unix.questions mailing list