change the color of shell...

8:02:00 PM 0 Comments





man console_codes
ESC [
CSI




How do I change the color of my shell prompt under Linux ?

A. You can change
the color of your shell prompt to impress your friend or to make your own life
quite easy while working at command prompt.


In the Linux default shell is BASH.


Your current prompt setting is stored in PS1 shell variable. There are other
variables too, like PS2, PS3 and PS4.


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 customized by inserting a number of
backslash-escaped special characters.


Task: Display current BASH prompt (PS1)


Use echo command to display current BASH prompt:
$
echo $PS1
Output:

[\\u@\h \\W]\\$

By default the command prompt is set to: [\u@\h \W]\$. Backslash-escaped
special characters are decoded as follows:


  • \u: Display the current username
  • \h: Display the hostname
  • \W: Print the current working directory

Task: Modify current BASH prompt


Use export command to setup a new shell prompt:$ export
PS1="[\\u@\\H \\W \\@]\\$"


Where,


  • \H: Display FQDN hostname
  • \@: Display current time in 12-hour am/pm format

Task: Add colors to the prompt


To add colors to the shell prompt use the following export command
syntax:
'\e[x;ym $PS1 \e[m'


Where,


  • \e[ Start color scheme
  • x;y Color pair to use (x;y)
  • $PS1 is your shell prompt
  • \e[m Stop color scheme

To set a red color prompt, type the command:
$ export
PS1="\e[0;31m[\u@\h \W]\$ \e[m "


List of Color code













































ColorCode
Black0;30
Blue0;34
Green0;32
Cyan0;36
Red0;31
Purple0;35
Brown0;33
Blue0;34
Green0;32
Cyan0;36
Red0;31
Purple0;35
Brown0;33

Replace digit 0 with 1 to get light color version.


Task: How to make the prompt setting permanent


Your new shell prompt setting is temporary i.e. when you logout setting will
be lost. To have it set everytime you login to your workstation add above export
command to your .bash_profile file or .bashrc file.
$
cd
$ vi .bash_profile
OR
$ vi
.bashrc
Append export line:
export
PS1="\e[0;31m[\u@\h \W]\$ \e[m"


Save and close the file.


tput command


You can also use tput command. For example display RED prompt use tput as
follows:
export PS1="\[$(tput setaf 1)\]\u@\h:\w $
\[$(tput sgr0)\]"


handy tput commands


  • tput bold - Bold effect
  • tput rev - Display inverse colors
  • tput sgr0 - Reset everything
  • tput setaf {CODE}- Set foreground color, see color {CODE} below
  • tput setab {CODE}- Set background color, see color {CODE} below

Colors {code} code for tput command






























Color {code}Color
0Black
1Red
2Green
3Yellow
4Blue
5Magenta
6Cyan
7White

Read the man page of bash and tput command for more information.




#!/bin/bash
# Display ANSI colours.
#tiff 01;35
esc="\033["
echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43"
echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _"
for fore in 30 31 32 33 34 35 36 37; do
    line1="$fore  "
    line2="    "
    for back in 40 41 42 43 44 45 46 47; do
        line1="${line1}${esc}${back};${fore}m Normal  ${esc}0m"
        line2="${line2}${esc}${back};${fore};1m Bold    ${esc}0m"
    done
    echo -e "$line1\n$line2"
done

Some say he’s half man half fish, others say he’s more of a seventy/thirty split. Either way he’s a fishy bastard.