小智 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"
)。
请参阅下面的示例: