home *** CD-ROM | disk | FTP | other *** search
- Newsgroups: comp.unix.shell
- Path: sparky!uunet!cis.ohio-state.edu!zaphod.mps.ohio-state.edu!darwin.sura.net!convex!convex!tchrist
- From: Tom Christiansen <tchrist@convex.COM>
- Subject: Re: How can process cd to a dir and stay there when exits
- Originator: tchrist@pixel.convex.com
- Sender: usenet@news.eng.convex.com (news access account)
- Message-ID: <1992Aug20.131345.3957@news.eng.convex.com>
- Date: Thu, 20 Aug 1992 13:13:45 GMT
- Reply-To: tchrist@convex.COM (Tom Christiansen)
- References: <BtA88K.MC1@encore.com>
- Nntp-Posting-Host: pixel.convex.com
- Organization: Convex Computer Corporation, Colorado Springs, CO
- X-Disclaimer: This message was written by a user at CONVEX Computer
- Corp. The opinions expressed are those of the user and
- not necessarily those of CONVEX.
- Lines: 75
-
- From the keyboard of mpalmer@encore.com (Mike Palmer):
- :Can anyone suggest a way for a process to cd to a dir & stay there when the \
- :process exits.
- :
- :I have a ksh solution using an alias, a script & the program, but I'd like
- :to do it just with a program, or at least a script & program than will work
- :under csh & ksh.
-
- FAQqed again.
-
- --tom
-
-
- 14) 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.
-
-
-
- --
- Tom Christiansen tchrist@convex.com convex!tchrist
- Unix is like a toll road on which you have to stop every 50 feet to
- pay another nickel. But hey! You only feel 5 cents poorer each time.
- --Larry Wall in <1992Aug13.192357.15731@netlabs.com>
-