Every time I execute a command, it's difficult for me to find where is the start point of the results comes from my last command. So I want to make the default line "Arthur-Mac-mini..." change color, how can I do it?
Thanks!
Answer
How do I change the color of the default title in iTerm2
You can do this by modifying the PROMPT_COMMAND
variable.
The contents of this variable isn’t just a string, like with PS1
. It’s actually a command that is executed before bash displays the prompt.
How to Customize the Command Prompt
Customizing
PROMPT_COMMAND
The better way to do this is the use the
PROMPT_COMMAND
variable; the contents of this variable isn’t just a string, like withPS1
. It’s actually a command that executed before bash displays the prompt. To give this a try, let’s add this to our.bashrc
:PROMPT_COMMAND='echo "comes before the prompt"'
We’re using the
echo
command here; if you aren’t familiar with it, you just pass it a string, and it will write it to the terminal. By itself, it’s not incredibly useful (although you can use it to view variables:echo $PS1
), but it’s great when used with other commands, so display their output.Let’s do something more useful here. Let’s write a bash function that we will assign to
PROMPT_COMMAND
. Try this:print_before_the_prompt () {
echo "comes before the prompt"
}
PROMPT_COMMAND=print_before_the_promptIf you use this, you shouldn’t see a difference in your prompt from what we have above. Now, let’s make this useful.
print_before_the_prompt () {
echo "$USER: $PWD"
}
PROMPT_COMMAND=print_before_the_prompt
PS1='->'
print_before_the_prompt
is later modfied to add colour to the prompt.
...
Adding Some Color
Looking good! But let’s take it one step farther. Let’s add some color to this. We can use some special codes to change the color of the text in the terminal. It can be rather daunting to use the actual code, so I like to copy this list of variables for the color and add it at the top of my .bashrc file:
txtblk='\e[0;30m' # Black - Regular
txtred='\e[0;31m' # Red
txtgrn='\e[0;32m' # Green
txtylw='\e[0;33m' # Yellow
txtblu='\e[0;34m' # Blue
txtpur='\e[0;35m' # Purple
txtcyn='\e[0;36m' # Cyan
txtwht='\e[0;37m' # White
bldblk='\e[1;30m' # Black - Bold
bldred='\e[1;31m' # Red
bldgrn='\e[1;32m' # Green
bldylw='\e[1;33m' # Yellow
bldblu='\e[1;34m' # Blue
bldpur='\e[1;35m' # Purple
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
unkblk='\e[4;30m' # Black - Underline
undred='\e[4;31m' # Red
undgrn='\e[4;32m' # Green
undylw='\e[4;33m' # Yellow
undblu='\e[4;34m' # Blue
undpur='\e[4;35m' # Purple
undcyn='\e[4;36m' # Cyan
undwht='\e[4;37m' # White
bakblk='\e[40m' # Black - Background
bakred='\e[41m' # Red
badgrn='\e[42m' # Green
bakylw='\e[43m' # Yellow
bakblu='\e[44m' # Blue
bakpur='\e[45m' # Purple
bakcyn='\e[46m' # Cyan
bakwht='\e[47m' # White
txtrst='\e[0m' # Text ResetThere’s some method to this madness: The first set are turn on normal coloring. The second set turn on bold coloring. The third set turn on underlined coloring. And that fourth set turn on background coloring. That last one resets the coloring to normal. So, let’s use these!
print_before_the_prompt () {
printf "\n $txtred%s: $bldgrn%s \n$txtrst" "$USER" "$PWD"
}Here, I’ve added
$txtred
before the first%s
, and$bldgrn
before the second%s
; then, at the end, I’ve reset the text color. You have to do this because once you set a color, it will hold until you either use a new color or reset the coloring. You’ll also notice that when setting a variable, we don’t prefix it with a dollar sign; but we do use the dollar sign when using the variable: that’s the way bash variables work. This gives us the following:
Source How to Customize the Command Prompt
No comments:
Post a Comment