Linux 终端字体颜色其实就是如何设置 PS1 变量的问题
颜色显示格式
表达式
1 2 3 4 5 6 7
| 颜色=\033[代码;前景色;背景色m 字符串 \033[0m
可以有以下形式: 颜色=\033[代码m 字符串 \033[0m 颜色=\033[前景m 字符串 \033[0m 颜色=\033[背景色m 字符串 \033[0m 颜色=\033[前景色;背景色m 字符串 \033[0m
|
举例
1
| echo -e "\033[41m 黑色字 \033[0m"
|
前景色、背景色
1 2 3 4 5 6 7 8 9 10 11
| 前景 背景 颜色 --------------------------------------- 30 40 黑色 31 41 紅色 32 42 綠色 33 43 黃色 34 44 藍色 35 45 紫紅色 36 46 青藍色 37 47 白色 1 1 透明色
|
代码
1 2 3 4 5 6 7 8
| 代码 意义 ------------------------- 0 OFF,关闭所有属性 1 高亮显示 4 underline,下划线 5 闪烁 7 反白显示 8 不可见,消隐
|
序列说明
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| \a ASCII响铃字符(也可以键入 \007) \d "Wed Sep 06"格式的日期 \e ASCII转义字符(也可以键入 \033) \h 主机名的第一部分(如 "mybox") \H 主机的全称(如 "mybox.mydomain.com") \j 在此 shell中通过按 ^Z挂起的进程数 \l 此 shell的终端设备名(如 "ttyp4") \n 换行符 \r 回车符 \s shell的名称(如 "bash") \t 24小时制时间(如 "23:01:01") \T 12小时制时间(如 "11:01:01") \@ 带有 am/pm的 12小时制时间 \u 用户名 \v bash的版本(如 2.04) \V Bash版本(包括补丁级别) ?/td>; \w 当前工作目录(如 "/home/drobbins") \W 当前工作目录的“基名 (basename)”(如 "drobbins") \! 当前命令在历史缓冲区中的位置 \# 命令编号(只要您键入内容,它就会在每次提示时累加) \$ 如果您不是超级用户 (root),则插入一个 "$";如果您是超级用户,则显示一个 "#" \xxxb插入一个用三位数 xxx(用零代替未使用的数字,如 "/007")表示的 ASCII字符 \\ 反斜杠 \[ 这个序列应该出现在不移动光标的字符序列(如颜色转义序列)之前。它使 bash能够正确计算自动换行。 \] 这个序列应该出现在非打印字符序列之后。
|
Linux 设置
首先我们不考虑添加颜色的问题,首先在 ~/.bashrc
文件添加:
然后新开一个终端,你看不到和以前有什么区别,因为我们一般系统默认的设置就是这样的,关于\u,\h,\w和$的含义参见上表,
其实修改字体颜色的公式很简单为:
1
| PS1=颜色+字符或序列+颜色+字符或序列......
|
注意:要将全部非打印字符用专用的 bash 转义序列 “[“和 “]“括起来。这两个序列通知 bash,被括起来的字符不占用行上的任何空间,这样就使自动换行能够继续正常工作。
这点很关键要不然等你设好了颜色,你的终端换行会乱七八糟
所以我们的颜色需要这样(网上很多文章都漏过了这一步)
颜色=[\033[代码;前景;背景m]
python 终端修改颜色
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| class MyColor(object): def handle(self, old_str, foreground_color, background_color='', special_effect=''): return '\033[{};{};{}m {} \033[0m'.format(special_effect, foreground_color, background_color, old_str)
@classmethod def str_info(self, old_str): return self.handle(self, old_str, '30', '42')
@classmethod def str_warn(self, old_str): return self.handle(self, old_str, '30', '43', '4')
@classmethod def str_error(self, old_str): return self.handle(self, old_str, '30', '41', '5')
|