peter@rlgvax.UUCP (Peter Klosky) (12/21/84)
> > I am facing a problem writing a command file. I would like this file > to be run with an argument supplied. The command it executes is cd. > cd $1 > I print the pwd in the command file and it prints the expected one. > On using the command pwd outside the command file I find that the > change in the directory has not been made. You do not say which shell you are using, as in sh or csh, but at any rate the problem is that your command file is probably being interpreted by a subprocess, and while you have managed to get the working directory of the subprocess changed, this does not change your parent's current working directory. You have similar trouble if you try to change an environment variable in a subshell. This is a feature, btw, not a bug. A solution is to have the command file read by the current shell instead of in a subshell. With the Bourne shell (sh) you can "dot" the file as in . cd_command_file with the Joy shell (csh), you can alias "cd" to source a command file which will perform your stuff then chdir to the argument. Here is a "cd" alias and associated command file which will perform just like cd, and also maintain a "trail of bread crumbs" which you can follow back via the "." alias also included. Also you can switch between two directories via the "sw" alias. PART A: ( aliases for .login ) set l='(' m=')' alias cd 'set arg=\!*;source ~/.pushd;unset arg;set prompt="${l}\\!${m} ${cwd}: "' alias sw 'pushd >& /dev/null;set prompt="${l}\\!${m} ${cwd}: "' alias . 'popd > /dev/null ;set prompt="${l}\\!${m} ${cwd}: "' set prompt="${l}\!${m} ${cwd}: " PART B: ( command file sourced by cd aliase; ~/.pushd ) if ( "$arg" == "" ) then pushd ~ >/dev/null else pushd $arg >/dev/null endif