生成特定于机器的 PS1 提示的可维护方法
Maintainable approach for generating a machine-specific PS1 Prompt
为了帮助自己快速直观地记住我登录到不同的系统,我为 \h
field in the Bash PS1
环境变量使用了不同的颜色。
我正在寻找一种方法来可靠地生成 PS1
,绑定到静态主机标识符;比如,通过 hostid
命令。
最初,我的 PS1
改编自 bashrcgenerator.com 生成的内容,看起来像:
export PS1="\u@\[$(tput bold)\]\[$(tput sgr0)\]\[3[38;5;35m\]\h\[$(tput sgr0)\]\[$(tput sgr0)\]\[3[38;5;15m\]\[$(tput sgr0)\]:\[3[38;5;245m\]\w\[$(tput sgr0)\]\[3[38;5;15m\]\[$(tput sgr0)\]\$ "
真是一团糟。
因此,要开始任何进展,第一步是进行一些重构。这使我进入了以下脚本:
bold="$(tput bold)"
reset="$(tput sgr0)"
green="\e[38;5;35m"
gray="\e[38;5;245m"
directory='\w'
host='\h'
user='\u'
function colorize() {
echo -n "${reset}"
}
export PS1="${user}@$(colorize $host $green):$(colorize $directory $gray)\$ "
至此,你至少可以看出到底是怎么回事了。
现在,我需要编写如下函数:
get_repeatable_color_for_hostid() {
# hash the $(hostid) into a valid color escape string
# e.g. 16ab1d60 --> \e[38;5;35m
}
为此,我需要了解:
- 字段部分的含义是什么
xx;y;zzm
例如\e[38;5;35m
?
- 如何进行从
hostid
到颜色转义序列 s.t 的哈希处理。颜色尽可能随机化。
关于颜色这个页面帮助我理解了所有细节:http://misc.flogisoft.com/bash/tip_colors_and_formatting
由于没有那么多颜色可供选择,一个想法是简单地为每个主机分配一种颜色,如果您有更多主机,则根据重要性(开发、生产等)对主机进行分组.) 每个组都有自己的颜色。
还有这个想法使用主机名的校验和生成颜色(从 1 到 256):COLOR=$(($(hostname | cksum | cut -f1 -d" ")%256+1))
为了帮助自己快速直观地记住我登录到不同的系统,我为 \h
field in the Bash PS1
环境变量使用了不同的颜色。
我正在寻找一种方法来可靠地生成 PS1
,绑定到静态主机标识符;比如,通过 hostid
命令。
最初,我的 PS1
改编自 bashrcgenerator.com 生成的内容,看起来像:
export PS1="\u@\[$(tput bold)\]\[$(tput sgr0)\]\[3[38;5;35m\]\h\[$(tput sgr0)\]\[$(tput sgr0)\]\[3[38;5;15m\]\[$(tput sgr0)\]:\[3[38;5;245m\]\w\[$(tput sgr0)\]\[3[38;5;15m\]\[$(tput sgr0)\]\$ "
真是一团糟。
因此,要开始任何进展,第一步是进行一些重构。这使我进入了以下脚本:
bold="$(tput bold)"
reset="$(tput sgr0)"
green="\e[38;5;35m"
gray="\e[38;5;245m"
directory='\w'
host='\h'
user='\u'
function colorize() {
echo -n "${reset}"
}
export PS1="${user}@$(colorize $host $green):$(colorize $directory $gray)\$ "
至此,你至少可以看出到底是怎么回事了。
现在,我需要编写如下函数:
get_repeatable_color_for_hostid() {
# hash the $(hostid) into a valid color escape string
# e.g. 16ab1d60 --> \e[38;5;35m
}
为此,我需要了解:
- 字段部分的含义是什么
xx;y;zzm
例如\e[38;5;35m
? - 如何进行从
hostid
到颜色转义序列 s.t 的哈希处理。颜色尽可能随机化。
关于颜色这个页面帮助我理解了所有细节:http://misc.flogisoft.com/bash/tip_colors_and_formatting
由于没有那么多颜色可供选择,一个想法是简单地为每个主机分配一种颜色,如果您有更多主机,则根据重要性(开发、生产等)对主机进行分组.) 每个组都有自己的颜色。
还有这个想法使用主机名的校验和生成颜色(从 1 到 256):COLOR=$(($(hostname | cksum | cut -f1 -d" ")%256+1))