linux - Show only current directory name (not full path) on bash prompt

04
2013-12
  • obvio171

    The way my bash prompt is currently configured, it shows the whole path to the current directory. This is annoying when I'm deep inside a directory tree, as the prompt becomes so long that every command wraps into the next line. How do I make it show only the last part of the path?

    This is what I have in my .bashrc:

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
    
    # If this is an xterm set the title to user@host:dir
    case "$TERM" in
    xterm*|rxvt*)
        PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME}: ${PWD/$HOME/~}\007"'
        ;;
    *)
        ;;
    esac
    
  • Answers
  • quack quixote

    Change the \w (lowercase) to \W (uppercase):

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\]\$ '
                                                                                           ^^
               this one waaaaaay over here ------------------------------------------------+
    

    Have a look at the Bash Prompt HOWTO for lots of fun details. example:

    user@host:/usr/local/bin$ echo $PS1
    ${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ 
    
    user@host:/usr/local/bin$ export PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\W\[\033[00m\]\$ '
    
    user@host:bin$
    

    The PROMPT_COMMAND variable, if set, is a command that gets run before displaying the prompt specified in PS1. In your case, PROMPT_COMMAND runs an echo statement with certain ANSI escape sequences that manipulate the titlebar of an Xterm.

    If you suspect your PROMPT_COMMAND is overriding your PS1 prompt, you can unset it and test things out:

    $ unset PROMPT_COMMAND
    

    Finally, be sure that you're changing the PS1 definition that actually gets used. Common locations are /etc/bash.bashrc, /etc/profile, ~/.bashrc, ~/.bash_profile, ~/.profile. The system files are generally (but not always) run before the user files.


  • Related Question

    ubuntu - How to shorten the no of characters display for the current directory in the prompt
  • michael

    I am using bash, and in my .basrhrc: I have the following which defined how my prompt looks:

    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\w\[\033[00m\]:\[\033[01;34m\]\!:\#\[\033[00m\]\$ '
    

    I think the \w display the current path of the shell.

    Is there any way to limit the number of character used to display the current path of the shell?


  • Related Answers
  • Dennis Williamson

    You can use \W (capital "W") which will make your home directory (/home/username) display as a tilde ('~') and only show the basename of the current directory. So an example might look like:

    dir:509:9$ pwd
    /home/username/dir
    dir:510:10$ cd ..
    ~:511:11$ 
    

    If you're using Bash 4, you can set the PROMPT_DIRTRIM shell variable to a number of trailing directory levels to display. But there was a bug in it which was fixed in a maintenance release (4.1, I think).