我想通过为每个主机设置特定的颜色来确保我已登录到正确的主机。我将我的.bashrc
周围环境复制到不同的主机,并为每个主机使用不同的颜色对其进行编辑。
但是,我不想在每个主机上手动编辑颜色,而是自动在每个主机上为我的bash提示填充颜色,每个主机名都有一个独特的颜色。
我正在想象一个.bashrc
获取主机名的命令,将其转换为唯一的颜色,并将其设置为bash提示色。
问题:如何在bash中将主机名散列为一种颜色?
它甚至可能根据终端背景色来判断合理的颜色集。
这可能不会获得基于背景的“漂亮”颜色,但如果默认的背景颜色始终为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))}')
要对此进行分解:
tput
-输出终端控制字符串setaf
-终端控制字符串;在这种情况下,set ANSI foreground
$(...)
-BASH可嵌套命令替换color参数
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
并打印。本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句