How do I get the current directory into my prompt?

How do I get the current directory into my prompt?

It depends which shell you are using. It's easy with some
shells, hard or impossible with others.

C Shell (csh):
Put this in your .cshrc - customize the prompt variable the
way you want.

alias setprompt 'set prompt="${cwd}% "'
setprompt # to set the initial prompt
alias cd 'chdir \!* && setprompt'

If you use pushd and popd, you'll also need

alias pushd 'pushd \!* && setprompt'
alias popd 'popd \!* && setprompt'

Some C shells don't keep a $cwd variable - you can use
`pwd` instead.

If you just want the last component of the current directory
in your prompt ("mail% " instead of "/usr/spool/mail% ")
you can use

alias setprompt 'set prompt="$cwd:t% "'

Some older csh's get the meaning of && and || reversed.
Try doing:

false && echo bug

If it prints "bug", you need to switch && and || (and get
a better version of csh.)

Bourne Shell (sh):

If you have a newer version of the Bourne Shell (SVR2 or newer)
you can use a shell function to make your own command, "xcd" say:

xcd() { cd $* ; PS1="`pwd` $ "; }

If you have an older Bourne shell, it's complicated but not
impossible. Here's one way. Add this to your .profile file:

LOGIN_SHELL=$$ export LOGIN_SHELL
CMDFILE=/tmp/cd.$$ export CMDFILE
# 16 is SIGURG, pick a signal that's not likely to be used
PROMPTSIG=16 export PROMPTSIG
trap '. $CMDFILE' $PROMPTSIG

and then put this executable script (without the indentation!),
let's call it "xcd", somewhere in your PATH

: xcd directory - change directory and set prompt
: by signalling the login shell to read a command file
cat >${CMDFILE?"not set"} < cd $1
PS1="\`pwd\`$ "
EOF
kill -${PROMPTSIG?"not set"} ${LOGIN_SHELL?"not set"}

Now change directories with "xcd /some/dir".

Korn Shell (ksh):

Put this in your .profile file:
PS1='$PWD $ '

If you just want the last component of the directory, use
PS1='${PWD##*/} $ '

T C shell (tcsh)

Tcsh is a popular enhanced version of csh with some extra
builtin variables (and many other features):

%~ the current directory, using ~ for $HOME
%/ the full pathname of the current directory
%c or %. the trailing component of the current directory

so you can do

set prompt='%~ '

BASH (FSF's "Bourne Again SHell")

\w in $PS1 gives the full pathname of the current directory,
with ~ expansion for $HOME; \W gives the basename of
the current directory. So, in addition to the above sh and
ksh solutions, you could use

PS1='\w $ '
or
PS1='\W $ '



Home FAQ