小智 8
这可能不会根据背景获得“漂亮”的颜色,但它应该可以工作,假设默认背景颜色始终为 color 0:
tput setaf $(hostname | sum | awk -v ncolors=$(infocmp -1 | expand | sed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p") 'ncolors>1 {print 1 + ($1 % (ncolors - 1))}')
Run Code Online (Sandbox Code Playgroud)
要分解这个:
tput - 输出终端控制字符串setaf- 终端控制字符串;在这种情况下,set ANSI foreground$(...) - BASH 可嵌套命令替换颜色参数
hostname - 获取主机名sum - 计算主机名的简单校验和awk...-v ncolors=$(...)- 将 AWK 变量设置为ncolors内部命令替换的值$(...)
infocmp -1 - 显示当前终端类型的终端信息,每行1个参数expand- 将制表符扩展为空格以使sed脚本更容易一些sed -n -e "s/^ *colors#\([0-9][0-9]*\),.*/\1/p"- 提取整数colors终端能力的值'ncolors>1 {...}'- awk 脚本,{...}仅当ncolors大于 1
时才运行代码print 1 + ($1 % (ncolors - 1))- 取绝对值$1(输入的字段1,来自sum,即$1校验和值),求除以的余数(ncolors - 1)(具有将其限制在0通过范围内的效果(ncolors - 2)),然后相加1并打印.您可能会对 感兴趣context-color,这是我根据 J Earls 的回答整理而成的: https: //github.com/ramnes/context-color
这是一个简单的脚本,执行时会根据命令输出的哈希值输出颜色。将其安装在您的某个位置后$PATH,您可以在您的中执行类似的操作.bashrc:
export PS1="$(context-color -p)$PS1\[\e[0m\]"
Run Code Online (Sandbox Code Playgroud)
(哪里--prompt/-p是用于转义提示颜色的开关,以及\[\e[0m\]用于重置颜色的转义序列)
默认情况下,用于生成哈希的命令是whoami; hostname。如果您只想根据主机名更改颜色,可以更改$CC_CONTEXT环境变量 ( export CC_CONTEXT="hostname") 或仅使用--context/-c选项 ( context-color -c "hostname")。
请参阅下面的示例: