Bash Prompt – Fix $PS1 on Ubuntu VM

bashprompt

I am running an Ubuntu VM out of Virtual Box and Vagrant:

vagrant@lucid64:~$ uname -a
Linux lucid64 2.6.32-38-server #83-Ubuntu SMP Wed Jan 4 11:26:59 UTC 2012 x86_64 GNU/Linux

My $PS1 variable doesn't actually match the prompt and is far more complex:

vagrant@lucid64:~$ echo $PS1
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

I am looking for an explanation of the relationship between the $PS1 and my prompt, which is $USER@$HOST:$PWD\$, as can be seen above.

E.g., on my regular laptop, which hosts this VM and is a Mac, it is clean and simple as follows:

~@12:10:20>echo $PS1
\w@\t>

Best Answer

The default $PS1 in Ubuntu consists of three parts:

  • \[\e]0;\u@\h: \w\a\]

    This is an escape sequence which will set the terminal title text to $USER@$HOST: $PWD.

    \[ and \] indicate the beginning and end of a sequence of non-printing characters.

    \e is an ASCII escape character.

    ]0; is the specific escape sequence to set the terminal icon and title in xterm compatible terminals

    \u expands to the username of the current user.

    @ is a literal @.

    \h expands to the hostname.

    : is a literal colon character.

    \w expands to the current working directory.

    \a is an ASCII bell character.

  • ${debian_chroot:+($debian_chroot)}

    If you're in a chroot environment, this will expand to the name of the chroot in parentheses.

    ${var:+OTHER} evaluates to $OTHER if var is set, otherwise as null string. $debian_chroot is a variable initalized in /etc/bash.bashrc to the contents of the file /etc/debian_chroot. Thus if your chroot environment includes this file, the prompt will include the contents of that file as an indication for which chroot the shell currently operates in.

  • \u@\h:\w\$

    This is the actual prompt you typically see.

    \u, @, \h, :, \w are as above.

    \$ expands to a number sign # if the effective uid is zero (i.e. user is root), otherwise it expands to a dollar sign $.

Resources

Related Question