"How do I set an [env]ironment variable from a [script]?" This question is * frequent, * imprecise, * generally impossible, but * interesting. "Imprecise" here means that, as it stands, the question could mean several quite different things. Most typical is this: in a command-line environment, a user wants to invoke a small script which re-assigns environment variables. While the examples here refer to [Tcl], ''exactly'' the same considerations and conclusions apply with other languages. The short answer is: you can't. For sound security reasons, child processes cannot modify a number of different characteristics of their parents, let alone independent processes; environment variables are among these protected characteristics. '''However''', there are a number of variations on this theme which have the potential to give all the satisfaction of an envvar-setting script. Tom Wilkason provides a recipe for setting envvar for new [Windows] ''sessions'' in "[Setting /bin/sh environment variables in the script]". More important, and more broadly applicable, are several ''cooperative'' models from the early days of [Unix]. In these, a process ''asks'' for a change of envvar. For example, under Unix, a parent [sh]-interpreting process might invoke source `my_example.tcl` If '''my_example.tcl''' contains #!/usr/bin/tclsh puts "export MY_VAR=some_value" teamwork between the two processes will result in the parent receiving '''some_value''' in its '''MY_VAR''' environment variable. [LV] hints at other examples in "[Setting /bin/sh environment variables in the script]". ---- [LV] I'll be the first to admit that I'm tired - it's the end of a long day of a long week. But that example doesn't look quite right. It seems to me that what you would end up with is an attempt of sh to evaluate source "export MY_VAR=somevalue" which it seems would be an unlikely file name to find. Perhaps you meant to use eval `my_example.tcl` ?? ---- A specific requirement is sometimes to alter the environment that the Tcl process itself sees; this environment is also the one seen by child processes that the script creates with the [exec] command. This environment is exposed to the script via the array '''env'''. Use of '''env''' is discussed on the man page [tclvars] (see http://www.purl.org/tcl/home/man/tcl8.4/TclCmd/tclvars.htm for details). As pointed out above, these changes to the environment apply only to the Tcl script and its children, have no effect on the script's parent process. ---- [Category Tutorial] (is there a better category than this?)