Scripting

從任意字元串生成顏色程式碼

  • June 7, 2020

我希望我的 shell 提示符根據伺服器的主機名自動具有不同的、唯一的、一致的顏色。

例如,當我登錄到特定的伺服器時,提示應該是特定於該伺服器的顏色,下次我登錄該伺服器時將是相同的顏色。我不想硬編碼任何伺服器名稱到顏色的映射。它不一定是漂亮的顏色,但如果它與深色背景具有高對比度,那就更好了。

因此,也許我可以創建主機名的確定性雜湊並將其轉換為提示可用的顏色程式碼。

我該怎麼做?

我最終這樣做了

# 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}')

如果是本地網路,請嘗試使用 IP 地址的最後一個八位字節作為基礎。也許重新排列一些位,並混合一些 1 或複制以確保對比度。

您可以通過從 /etc/hosts 中提取您的主機名和 IP,並在本地終端上調整方法來在本地評估該過程。

我建議在遠端主機上的配置文件中執行此操作。為每個提示重新生成它的成本太高。

引用自:https://unix.stackexchange.com/questions/552629