abcscnuk@csun.UUCP (02/06/87)
Here are some shell functions to implement ``pushd'' and ``popd'' for
bourne shell. They should behave much in the same way as the ``pushd'' and
``popd'' commands in csh. Having gotten used to using them in csh, I couldn't
live without them, so I decided to write up shell functions that will behave
similarly.
If you're unfamiliar with ``pushd'' and ``popd,'' here are brief
descriptions:
pushd -- ``cd'' to a directory (if one is specified) and save the
previous PWD into a directory stack. If no arguments are
given, it cd's you to the directory at the top of the
directory stack and puts present PWD at the top of the
stack (Essentially switches between the present directory
and directory at top of directory stack).
popd -- pop the top of directory stack off and ``cd'' to it.
Naoto Kimura
//-n-\\ (csun!abcscnuk)
_____---=======---_____
====____\ /.. ..\ /____====
// ---\__O__/--- \\ Enterprise... Surrender or we'll
\_\ /_/ send back your *&^$% tribbles !!!
----- cut here ----- cut here ----- cut here ----- cut here -----
DIRSTAK=""
dirs() {
echo `pwd` $DIRSTAK
}
pushdir() {
if test $# -eq 0
then
if test "$DIRSTAK" = ""
then
echo "directory stack empty."
else
OLDPWD=`pwd`
popdir
DIRSTAK="$OLDPWD $DIRSTAK"
fi
else
while test "$*" != ""
do
OLDPWD=`pwd`
if cd "$1"
then
DIRSTAK="$OLDPWD $DIRSTAK"
fi
shift
done
fi
}
listhead() {
echo $1
}
listtail() {
shift
echo $*
}
popdir() {
if test $# -ne 0
then
echo "No parameters allowed with popdir"
else
if test "$DIRSTAK" = ""
then
echo "directory stack empty."
else
TMP1=`listhead $DIRSTAK`
DIRSTAK=`listtail $DIRSTAK`
if test "$TMP1" != ""
then
cd "$TMP1"
fi
fi
fi
}
pushd() {
if pushdir $*
then
dirs
fi
}
popd() {
if popdir $*
then
dirs
fi
}abcscnuk@csun.UUCP (02/07/87)
Sorry about the posting for those with bourne shell w/o shell
functions. I forgot to mention that I was using System V. Looking over
the man entry on a BSD system, I found that bourne shell doesn't support
shell functions, so I can guess that there are probably other systems
that won't support shell functions in bourne shell. I guess that there
are quite a few people out there that will find my posting quite
useless..
Naoto Kimura
//-n-\\ (csun!abcscnuk)
_____---=======---_____
====____\ /.. ..\ /____====
// ---\__O__/--- \\ Enterprise... Surrender or we'll
\_\ /_/ send back your *&^$% tribbles !!!