roy@phri.UUCP (Roy Smith) (05/16/88)
Is there any way to clear the directory stack in csh without doing
popd? I did essentially the following recently:
# cd /
# mount /dev/ndl7 /mnt
# pushd /mnt/etc
# pushd
# umount /mnt
# popd <-- this gave an "invalid directory" or somesuch message.
The problem was that my directory stack was "/ /mnt/etc". I was
allowed to umount /mnt because while /mnt/etc was in my dirstack because it
wasn't actually the current directory of any proces, but I couldn't clear
the dirstack because a popd would try to cd back to /mnt/etc which no
longer existed. Having a bogus directory at the bottom of my dirstack
doesn't actually do any harm, but it was annoying that I couldn't find any
way to get rid of it without exiting the shell.
--
Roy Smith, System Administrator
Public Health Research Institute
455 First Avenue, New York, NY 10016
{allegra,philabs,cmcl2,rutgers}!phri!roy -or- phri!roy@uunet.uu.netroy@phri.UUCP (Roy Smith) (05/16/88)
In the referenced article, I asked how to get an item of csh's
dirstack with actually chdir(2)ing to it. Chris Torek mailed me the answer
already (it's "popd +1") and I'm sure I'll get deluged with many many more
of the same. I know, I know, RTFM. I did RTFM but I guess I never noticed
that. Let's see, how long have I been using csh? 4, 5 years? Hmm...
--
Roy Smith, System Administrator
Public Health Research Institute
455 First Avenue, New York, NY 10016
{allegra,philabs,cmcl2,rutgers}!phri!roy -or- phri!roy@uunet.uu.netmark@comp.vuw.ac.nz (Mark Davies) (05/17/88)
In article <3269@phri.UUCP> roy@phri.UUCP (Roy Smith) writes: > ..., but I couldn't clear >the dirstack because a popd would try to cd back to /mnt/etc which no >longer existed. Having a bogus directory at the bottom of my dirstack >doesn't actually do any harm, but it was annoying that I couldn't find any >way to get rid of it without exiting the shell. popd +1 will remove the first entry in the directory stack (given current directory is the 0th entry) so if you have a stack that was "/ /mnt/etc" popd +1 will leave it as "/" and since this does not involve changing directory it doesn't matter that /mnt/etc no longer exists. (This works on all machines I have access to, Pyramid, Sun, 4.3BSD Vaxen). mark -- Domainised: mark@comp.vuw.ac.nz Bang form: ...!uunet!vuwcomp!mark
schaefer@ogcvax.ogc.edu (Barton E. Schaefer) (05/17/88)
In article <phri.3269> roy@phri.UUCP (Roy Smith) writes: } } Is there any way to clear the directory stack in csh without doing popd? No, but there's a way to do popd without causing the csh to change to the directory being popped. } The problem was that my directory stack was "/ /mnt/etc". I was } allowed to umount /mnt because while /mnt/etc was in my dirstack because it } wasn't actually the current directory of any proces, but I couldn't clear } the dirstack because a popd would try to cd back to /mnt/etc which no } longer existed. To remove a bogus directory from the stack, use popd +N where N is the stack position of the bogus directory. Position 0 (zero) is the top of the stack. In the example above, % dirs / /mnt/etc % popd +1 / % For those interested, pushd can also take a +N argument, which rotates the directory stack N positions. } Roy Smith, System Administrator } Public Health Research Institute } 455 First Avenue, New York, NY 10016 } {allegra,philabs,cmcl2,rutgers}!phri!roy -or- phri!roy@uunet.uu.net -- Bart Schaefer CSNET schaefer@cse.ogc.edu UUCP ...{tektronix,verdix}!ogcvax!schaefer Hobbes: "How come we play war and not peace?" Calvin: "Too few role models."