My default terminal color is gray, that's fine.
My bash prompt displays a bunch of colors, this works fine:
PS1="${COLOR_RED}\u${COLOR_WHITE}@${COLOR_RED}${COMPUTERNAME} ${COLOR_BLUE}\w${GITPROMPT} ${COLOR_RESET}"
See example: http://cl.ly/image/002f210X1f1u
But the text I type in, at the end of the prompt, is gray. I want it to be white (ANSI code "[37m").
If I add a COLOR_WHITE at the end of the prompt, instead of the COLOR_RESET, then the default terminal color changes to white until it is reset. This makes a weird effect of some gray text, with some white text bleeding through at the top.
See example of problem: http://cl.ly/image/1Z3g3v0e083B
How can I change the "input text" color of the Bash prompt, to something other than the terminal default color? Thanks for any suggestions!
Simply add the following line:
export PS1=" \[\033[34m\]\u@\h \[\033[33m\]\w\[\033[31m\]\[\033[00m\] $ "
This is my preferred colors. You can customize each part of prompt's color by changing m
codes (e.g. 34m
) which are ANSI color codes.
List of ANSI Color codes:
- Black: 30m
- Red: 31m
- Green: 32m
- Yellow: 33m
- Blue: 34m
- Purple: 35m
- Cyan: 36m
- White: 37m
Try this one, it is simpler:
export PS1="\e[0;32m\t \e[32;1m\u@\h:\e[0;36m\w\e[0m$ "
I would suggest changing your terminal emulator's settings. It appears you are using iTerm2 (if you are on iTerm, I suggest looking at iTerm2), so:
Settings -> Profiles -> Your Profile -> Color. Under 'basic colors' adjust 'foreground'
For just changing the color of the input text, in zsh you could use a
preexec () { echo -ne "\e[0m" }
I have found a hack-ish way to try this with bash:
Not natively, but it can be hacked up using the DEBUG trap. This code sets up preexec and
precmd
functions similar to zsh. The command line is passed as a single argument to preexec.Here is a simplified version of the code to set up a precmd function that is executed before running each command.
preexec () { :; }
preexec_invoke_exec () {
[ -n "$COMP_LINE" ] && return # do nothing if completing
local this_command=$(history 1 | sed -e "s/^[ ]*[0-9]*[ ]*//g");
preexec "$this_command"
}
trap 'preexec_invoke_exec' DEBUG This trick is due to Glyph Lefkowitz; thanks to [bcat] for locating the original author.
I found that in my installation of Debian 8 I already have this but it is commented by default, it is
# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
force_color_prompt=yes
if [ -n "$force_color_prompt" ]; then
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
# We have color support; assume it's compliant with Ecma-48
# (ISO/IEC-6429). (Lack of such support is extremely rare, and such
# a case would tend to support setf rather than setaf.)
color_prompt=yes
else
color_prompt=
fi
fi
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt
I just uncommented the line that says force_color_prompt=yes
If you didn't already have this in your .bashrc then you can copy this and paste it in yours.
来源:https://stackoverflow.com/questions/16636007/can-i-change-the-input-color-of-my-bash-prompt-to-something-different-than-the-t