Top Document: Unix - Frequently Asked Questions (2/7) [Frequent posting] Previous Document: Why do I get [some strange error message] when I "rsh host command" ? Next Document: How do I redirect stdout and stderr separately in csh? See reader questions & answers on this topic! - Help others by sharing your knowledge 2.8) How do I {set an environment variable, change directory} inside a program or shell script and have that change affect my 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. User Contributions:Top Document: Unix - Frequently Asked Questions (2/7) [Frequent posting] Previous Document: Why do I get [some strange error message] when I "rsh host command" ? Next Document: How do I redirect stdout and stderr separately in csh? Part1 - Part2 - Part3 - Part4 - Part5 - Part6 - Part7 - Single Page [ Usenet FAQs | Web FAQs | Documents | RFC Index ] Send corrections/additions to the FAQ Maintainer: tmatimar@isgtec.com (Ted Timar)
Last Update March 27 2014 @ 02:12 PM
|
Comment about this article, ask questions, or add new information about this topic: