UNIX FAQ Version 2.1 92/12/04 -- Question 2.4

UNIX FAQ Version 2.1 92/12/04 -- Question 2.4

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"} <<EOF 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 %d or %/ 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 $ '