The FreeBSD Diary |
(TM) | Providing practical examples since 1998If you buy from Amazon USA, please support us by using this link. |
Changing your bash prompt
6 January 1999
|
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: bash-2.02$ 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. |
.bash_profile
|
First, go to your home directory:cd 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}$ ";; esac This will give you a prompt something like this: [fleur@flossy:/usr/home/fleur] |
su
|
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.PROMPTING 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- tory \! 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: |