The FreeBSD Diary

The FreeBSD Diary (TM)

Providing practical examples since 1998

If you buy from Amazon USA, please support us by using this link.
Changing your bash prompt 6 January 1999
Need more help on this topic? Click here
This article has 2 comments
Show me similar articles
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 su 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 18 September 2000
I also found this:

Need more help on this topic? Click here
This article has 2 comments
Show me similar articles