How do I {set an environment variable, change directory} inside

How do I {set an environment variable, change directory} inside

current shell?

In general, you can't, at least not without making special
arrangements. When a child process is created, it inherits a
copy of its parent's variables (and current directory). The
child can change these values all it wants but the changes won't
affect the parent shell, since the child is changing a copy of
the original data.

Some special arrangements are possible. Your child process could
write out the changed variables, if the parent was prepared to
read the output and interpret it as commands to set its own
variables.

Also, shells can arrange to run other shell scripts in the
context of the current shell, rather than in a child process, so
that changes will affect the original shell.

For instance, if you have a C shell script named "myscript":

cd /very/long/path
setenv PATH /something:/something-else

or the equivalent Bourne or Korn shell script

cd /very/long/path
PATH=/something:/something-else export PATH

and try to run "myscript" from your shell, your shell will fork
and run the shell script in a subprocess. The subprocess is also
running the shell; when it sees the "cd" command it changes *its*
current directory, and when it sees the "setenv" command it
changes *its* environment, but neither has any effect on the
current directory of the shell at which you're typing (your login
shell, let's say).

In order to get your login shell to execute the script (without
forking) you have to use the "." command (for the Bourne or Korn
shells) or the "source" command (for the C shell). I.e. you type

. myscript

to the Bourne or Korn shells, or

source myscript

to the C shell.

If all you are trying to do is change directory or set an
environment variable, it will probably be simpler to use a C
shell alias or Bourne/Korn shell function. See the "how do I get
the current directory into my prompt" section of this article for
some examples.

A much more detailed answer prepared by
xtm@telelogic.se (Thomas Michanek) can be found at
ftp.wg.omron.co.jp in /pub/unix-faq/docs/script-vs-env.



Home FAQ