The C shell gives the absolute pathname of your current directory in
$cwd
(
14.13
)
.
Many people use that in their prompts.
If you use the
pushd
and
popd
(
14.6
)
commands, you may not always remember exactly
what's in your directory stack (I don't, at least).
Also, do you want to shorten your home directory pathname to just a tilde
(
~
) so it takes less room in the prompt?
Here's how: run the
dirs
command and use its output in your prompt.
A simple alias for
cd
users looks like this:
alias cd 'chdir \!* && set prompt="`dirs`% "'
and the prompts look like:
/work/project %
cd
~ %
cd bin
~/bin %
Here's what to put in
.cshrc
to make a
multiline prompt (
7.5
)
that shows the directory stack:
uname -n
expr
|
# PUT hostname.domain.name IN $hostname AND hostname IN $HOST:
set hostname=`uname -n`
setenv HOST `expr $hostname : '\([^.]*\).*'`
alias setprompt 'set prompt="\\
${USER}@${HOST} `dirs`\\
\! % "'
alias cd 'chdir \!* && setprompt'
alias pushd 'pushd \!* && setprompt'
alias popd 'popd \!* && setprompt'
setprompt # SET THE INITIAL PROMPT
|
Because
bash
can run a command each time it sets its prompt,
and because it has
built-in prompt operators (
7.4
)
,
the
bash
version of all the stuff above fits on one line:
$(...)
|
PS1='\n\u@\h $(dirs)\n\! \$ '
|
That makes a blank line before each prompt; if you don't want that, join the
first and second lines of the
setprompt
alias or remove the
first
\n
.
Let's push a couple of directories and watch the prompt:
jerry@ora ~
1 %
pushd /work/src/perl
/work/src/perl ~
jerry@ora /work/src/perl ~
2 %
cd ../cnews
jerry@ora /work/src/cnews ~
3 %
pushd ~/bin
~/bin /work/src/cnews ~
jerry@ora ~/bin /work/src/cnews ~
4 %
Warning!
|
Of course, the prompt looks a little redundant there because each
pushd
command also shows the
dirs
output. A few commands later, though,
having your directory stack in the prompt will be handy.
If your directory stack has a lot of entries, the first line of the prompt
can get wider than the screen.
In that case, store the
dirs
output in a
shell array (
47.5
)
and edit
it with a command like
sed
or with the
built-in
csh
string editing (
9.6
)
. |
For example, to show just the tail of each path in the
dirs
output, use the alias below; the C shell operator
:gt
globally edits all
words, to the tail of each pathname:
alias setprompt 'set dirs=(`dirs`); set prompt="\\
${USER}@${HOST} $dirs:gt\\
\! % "'
Watch the prompt.
If you forget what the names in the prompt mean, just type
dirs
:
jerry@ora bin cnews jerry
5 %
pushd ~/tmp/test
~/tmp/test ~/bin /work/src/cnews ~
...
jerry@ora test bin cnews jerry
12 %
dirs
~/tmp/test ~/bin /work/src/cnews ~
There's a related tip in article
47.5
:
storing the directory stack in an array variable.