微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何根据主机名在 Bash 中自动设置提示颜色

如何解决如何根据主机名在 Bash 中自动设置提示颜色

我想要一个标准的 BASH PS1 提示,它会根据服务器的主机名自动设置颜色。

这意味着每当登录服务器时,您会立即清楚和熟悉您在该服务器上,因为提示颜色与其他服务器不同

给定的主机名必须始终具有相同的颜色

我在十六进制代码中发现了类似的想法,但这是专门用于 BASH 颜色的

我们的想法是可以有一个标准的 bash 提示代码片段,可以包含在任何地方,并且总是为不同的服务器提供不同的颜色,而无需任何进一步的代码更改

简而言之,问题是您可以编写什么 bash 函数来接受 2 个参数 - 一个字符串和一个散列。它应该以散列确定的颜色回显字符串,并且对于任何给定的散列,颜色应该始终相同

编辑 - 澄清

到目前为止的答案假设主机名是预先知道的

我正在寻找可以根据该服务器的任何主机名确定性地分配相同随机颜色的东西

在新服务器上安装 PS1 时,我绝对不会寻找需要任何类型代码更改的东西

这篇文章大致如此,但似乎没有我可以使用的简单 PS1 片段https://aweirdimagination.net/2015/02/28/better-hash-based-colors/

解决方法

确定主机名是什么,然后定义PS1

case $HOSTNAME in
  foo.com) color='...' ;;
  bar.org) color='...' ;;
esac

PS1="..."   # using $color as necessary
,
declare -A color=([hosty]=33 [hostr]=31 [hostb]=34 [hostm]=35)
function color () {
    host=$1
    printf $'\e[%d;1m%s\e[m' "${color[$host]}" "$host"
}

PS1='$(color $HOSTNAME)$ '
,

我正在寻找可以根据该服务器的任何主机名确定性地分配相同随机颜色的东西

采用散列算法并计算主机名的散列 - 将字符串转换为数字。然后使用这个伪随机数生成颜色。

gen_prompt_function() {
   local number
   number=$(
       # get "random" string that depends on hostname
       md5sum <<<"$HOSTNAME" |
       # meh - take first byte and convert it to decimal
       cut -c-2 | xargs -i printf "%d\n" "0x{}" |
       # convert 0-255 range into 30-37 range
       awk '{print int($0/255.0*(37-30)+30)}'
  )
  printf '\[\e[%d;1m\]%s\[\e[m\]' "$number" "$HOSTNAME"
}
PS1="$(gen_prompt_function)"'$ '

阅读ANSI escpe sequencestput 以及关于color handling in terminfobash manual controlling prompt。请记住在颜色代码周围添加 \[ \]

附注。在我专门为主机名提示着色的 bash 冒险中,我编写了一个 color handling script,它从 3 种 RGB 颜色生成彩虹,这些颜色取自从字符串的哈希中提取的前 18 个字符,如下面的 screeshot 所示。该脚本用于我的 PS1 configuration

enter image description here

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?