Changing your bash prompt

Changing your bash prompt

see also Shells

I’ve decided to change the prompt
in my bash shell.  That’s the few bits of text that your shell spits at you when it
wants something from you.  At present, my prompt is:


Not very exciting.  So I decided to change it.

man bash

genesis– on #freebsd undernet told me where to look.  I eventually found what he
was looking for, but I attribute that to my impatience.  Here’s the extract from the
INVOCATION section which is relevant:

When  bash  is  invoked  as an interactive login shell,
it first reads and executes commands from the file 
/etc/profile, if  that  file exists.  After reading that
file, it looks for ~/.bash_profile, ~/.bash_login, and
~/.profile, in  that  order,  and reads and executes
commands from the first one that exists and is  readable.

So I will create a .bash_profile in my home directory.


First, go to your home directory:


To create this new file, all I did was:

cp .profile .bash_profile

Then I added the following to the bottom of .bash_profile:

# set prompt: ``username@hostname:/directory $ ''
PS1="[\u@\h:\w] " 
case `id -u` in
      0) PS1="${PS1}# ";;
      *) PS1="${PS1}$ ";;

This will give you a prompt something like this:



When I use the su command, I supply the -l option in order to
get my prompt as indicated above.  This will simulate a full login.  See man
for details.

Prompt options

There are several options for the bash prompt.  The following is an extract from
the man pages.  In the example above, I use \u, \h, and \w.

       When executing interactively, bash  displays  the  primary
       prompt  PS1  when  it  is ready to read a command, and the
       secondary prompt PS2 when it needs more input to  complete
       a  command.   Bash  allows these prompt strings to be cus-
       tomized by inserting a number of backslash-escaped special
       characters that are decoded as follows:
              \a     an ASCII bell character (07)
              \d     the  date  in  "Weekday  Month  Date" format
                     (e.g., "Tue May 26")
              \e     an ASCII escape character (033)
              \h     the hostname up to the first `.'
              \H     the hostname
              \n     newline
              \r     carriage return
              \s     the name of the shell, the  basename  of  $0
                     (the portion following the final slash)
              \t     the current time in 24-hour HH:MM:SS format
              \T     the current time in 12-hour HH:MM:SS format
              \@     the current time in 12-hour am/pm format
              \u     the username of the current user
              \v     the version of bash (e.g., 2.00)
              \V     the  release  of  bash, version + patchlevel
                     (e.g., 2.00.0)
              \w     the current working directory
              \W     the basename of the current  working  direc-
              \!     the history number of this command
              \#     the command number of this command
              \$     if  the effective UID is 0, a #, otherwise a
              \nnn   the character  corresponding  to  the  octal
                     number nnn
              \\     a backslash
              \[     begin a sequence of non-printing characters,
                     which could be used to embed a terminal con-
                     trol sequence into the prompt
              \]     end a sequence of non-printing characters

       The command number and the history number are usually dif-
       ferent: the history number of a command is its position in
       the history list, which may include commands restored from
       the history file (see HISTORY below),  while  the  command
       number  is  the  position in the sequence of commands exe-
       cuted during the current shell session.  After the  string
       is  decoded,  it is expanded via parameter expansion, com-
       mand substitution, arithmetic expansion, string expansion,
       and  quote removal, subject to the value of the promptvars
       shell option (see the description  of  the  shopt  command
       under SHELL BUILTIN COMMANDS below).

More bash prompt stuff (added on 18 Sep 2000)

I also found this:

2 thoughts on “Changing your bash prompt”

  1. Matthew Dickinson

    there is no need for the case statement in that script. all five lines can be duplicated with one line:

    PS1="[\u@\h:\w]\$ "

    the \$ will put a # for uid = 0 and a $ for all others automatically. this is mentioned in the article but the author does not use this method.

Leave a Comment

Scroll to Top