Path: utzoo!attcan!uunet!visdc!jiii From: jiii@visdc.UUCP (John E Van Deusen III) Newsgroups: comp.unix.wizards Subject: Re: Set parent env with csh script Summary: Setting environment variables Message-ID: <431@visdc.UUCP> Date: 10 Jan 89 00:33:35 GMT References: <174@v7fs1.UUCP> Organization: VI Software Development Co., Boise, Idaho Lines: 44 You write: > I would like to write a shell script (csh preferred) that will > set a few environment variables to various things. Suppose you have a file named envtest containing the following: export TEST TEST1 TEST=xxx TEST1="aaa bbb" If envtest is executable, then preceding the name with a ". " will execute envtest in the same shell. For example: $ . envtest The shell command $ eval `cat envtest` will also put TEST=xxx and TEST1=aaa bbb into your environment. The env(1) command lets you modify the environment. If the file envtest contained TEST=xxx then the command $ exec env - `cat envtest` sh will leave you in a shell where only TEST=xxx is in the environment. Note that env(1) only wants arguments of the form name=value. On my system TEST1="aaa bbb" will not work with env, because it reevaluates its arguments. > Is it possible for a subshell to change the calling shell's > environment? How? You can use getenv(3C) from a C program to return the address of an environment variable of the form name=value. You can modify what is stored at that location, but not with impunity. If you set TEST=xxxxxxxxxx prior to invoking your program, then you can change its value to be anything up to 10 characters long (plus a terminating null). The important thing is that the storage for TEST has to be allocated prior to the execution of your program. -- John E Van Deusen III, PO Box 9283, Boise, ID 83707, (208) 343-1865