自定义Bash提示符并着色
系列 - Customize Prompt of Shell
目录
原文地址
本文部分转载自如何修改PS1命令行提示符的颜色
1 ANSI转义字符
1.1 Control Sequence Introducer
Control Sequence Introducer (CSI) 在ANSI转义序列中用两字符序列ESC [表示, 这个序列是由控制字符ESC (通常用^[或<ESC>表示), 加上左方括号字符[组成, 即^[[。
在bash中, 控制字符ESC也支持\e、\033或\x1b三种转义字符的写法, 大写字母也行 (\E和\x1B)。
1.2 Set Graphics Rendition
转义序列代码中没有空格
转义序列代码在实际使用时中间没有空格, 下面示例中用空格隔开只是方便阅读。
要控制显示格式, 须使用Set Graphic Rendition (SGR) 转义序列: ESC [ parameters m。
parameters是控制代码, 使用多个代码时中间用分号;隔开, 比如1;31。- 如果不指定控制代码, 即
ESC [ m, 相当于ESC [ 0 m(重置所有显示控制属性为默认设置)。 m表示SGR序列。
1.2.1 显示控制代码
显示控制代码有3类:
- 效果控制代码
- 前景色控制代码 (即字体颜色)
- 背景色控制代码
1.2.1.1 效果控制代码
| 代码 | 代码 | 效果 |
|---|---|---|
| 00 | 0 | 重置所有显示属性为默认设置 |
| 01 | 1 | 字体加粗 |
| 04 | 4 | 字体加下划线 |
| 05 | 5 | 字体闪烁 |
| 07 | 7 | 前景色与背景色调转 |
00与0效果相同, 其他数字也类似。
1.2.1.2 前景色与背景色控制代码
| 前景色代码 | 背景色代码 | 颜色 |
|---|---|---|
| 30 | 40 | 黑色 |
| 31 | 41 | 红色 |
| 32 | 42 | 绿色 |
| 33 | 43 | 黄色 |
| 34 | 44 | 蓝色 |
| 35 | 45 | 紫色 |
| 36 | 46 | 青色 |
| 37 | 47 | 白色 |
2 修改PS1
在 环境变量配置文件 中添加:
PS1='\n'
PS1+='\[\e[1;37m\]'
PS1+='\t '
PS1+='\[\e[1;31m\]'
PS1+='\u'
PS1+='\[\e[1;37m\]'
PS1+='@'
PS1+='\[\e[1;31m\]'
PS1+='\h '
PS1+='\[\e[1;36m\]'
PS1+='$PWD'
PS1+='\n'
PS1+='\[\e[1;31m\]'
PS1+='\$ '
PS1+='\[\e[0m\]'
export PS12.1 解释
\n表示换行。\[和\]这两个转义字符通知bash, 被括起来的字符不占用命令行上的任何空间, 这样就使自动换行能够继续正常工作。如果没有这两个转义字符, 当用户键入的命令到达终端的最右端时, 或者查看历史命令时, 就会出现显示错乱的情况。\e[1;37m即SGR转义序列ESC [ parameters m, 定义后续字符的颜色, 这里是加粗的白色。\t以HH:MM:SS格式显示24小时制时间。\u显示当前用户名。\h显示当前host机器名称。$PWD显示完整路径。\$当用户为root时, 显示为#。\e[0m重置后续字符的显示控制属性为默认设置。
3 效果
普通用户:
20:34:50 senzyo@Debian /home/senzyo$
root用户:
20:34:50 root@Debian /root#
4 Git Bash on Windows
对于Git for Windows Setup, 修改C:\Program Files\Git\etc\profile.d\git-prompt.sh; 对于Git for Windows Portable, 修改PortableGit\etc\profile.d\git-prompt.sh, 参考使用以下内容:
if test -f /etc/profile.d/git-sdk.sh; then
TITLEPREFIX=SDK-${MSYSTEM#MINGW}
else
TITLEPREFIX=$MSYSTEM
fi
if test -f ~/.config/git/git-prompt.sh; then
. ~/.config/git/git-prompt.sh
else
PS1='\[\e]0;$TITLEPREFIX:$PWD\007\]' # set window title
PS1+='\n'
PS1+='\[\e[1;37m\]'
PS1+='\t '
PS1+='\[\e[1;31m\]'
PS1+='\u'
PS1+='\[\e[1;37m\]'
PS1+='@'
PS1+='\[\e[1;31m\]'
PS1+='\h '
PS1+='\[\e[1;36m\]'
PS1+='$PWD'
if test -z "$WINELOADERNOEXEC"; then
GIT_EXEC_PATH="$(git --exec-path 2>/dev/null)"
COMPLETION_PATH="${GIT_EXEC_PATH%/libexec/git-core}"
COMPLETION_PATH="${COMPLETION_PATH%/lib/git-core}"
COMPLETION_PATH="$COMPLETION_PATH/share/git/completion"
if test -f "$COMPLETION_PATH/git-prompt.sh"; then
. "$COMPLETION_PATH/git-completion.bash"
. "$COMPLETION_PATH/git-prompt.sh"
PS1+='\[\e[1;36m\]' # change color to cyan
PS1+='`__git_ps1`' # bash function
fi
fi
PS1+='\n'
PS1+='\[\e[1;31m\]'
PS1+='$ '
PS1+='\[\e[0m\]'
fi
MSYS2_PS1="$PS1" # for detection by MSYS2 SDK's bash.basrc
# Evaluate all user-specific Bash completion scripts (if any)
if test -z "$WINELOADERNOEXEC"; then
for c in "$HOME"/bash_completion.d/*.bash; do
# Handle absence of any scripts (or the folder) gracefully
test ! -f "$c" ||
. "$c"
done
fi要想效果和上面一样, 需要更改GitBash的设置: Options→Text→Show blod→as font & as colour