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.