从任意字符串生成颜色代码

从任意字符串生成颜色代码

我希望我的 shell 提示符能够根据服务器的主机名自动具有不同的、唯一的、一致的颜色。

例如,当我登录到特定服务器时,提示符应该是该服务器特有的颜色,并且下次登录该服务器时会是相同的颜色。我不想对服务器名称到颜色的任何映射进行硬编码。它不一定是漂亮的颜色,但如果它与深色背景具有高对比度,那就太好了。

因此,也许我可以创建主机名的确定性哈希并将其转换为提示符可用的颜色代码。

我该怎么做呢?

答案1

我最终做了这个

# get hash and byte size
prompt_hash_and_size=`hostname|cksum`
# get hash part and apply modulo 256 to put it in range 1..255
prompt_hashcolor=$(echo $prompt_hash_and_size|awk '{print $1%255 + 1}')
# use it as background color in prompt
PROMPT="%K{${prompt_hashcolor}}%F%~%f%k%  "

你可以将它压缩为

prompt_hashcolor=$(hostname|cksum|awk '{print $1%256}')

答案2

如果是本地网络,请尝试使用 IP 地址的最后一个八位字节作为基础。也许可以重新排列其中的一些位,并混合一些 1 或复制以确保对比度。

您可以通过从 /etc/hosts 中提取主机名和 IP,并在本地终端上调整方法来在本地评估该过程。

我建议在远程主机上的配置文件中执行此操作。为每个提示重新生成它的成本太高。

答案3

这可确保选择可读的颜色组合:

如何根据服务器获得不同颜色的提示?

相关内容