Bash

如何根據伺服器獲得不同顏色的提示?

  • June 7, 2020

ssh一直在使用,但有時我會忘記我在哪個伺服器上。

我可以使用相同的.bashrc(/home 是 NFS 共享的)在不同的伺服器上有不同顏色的提示嗎?最好不列出伺服器。

像這樣的東西:

set_color_prompt() {
   _colorcombos() {
   PERL_HASH_SEED=109 perl -MB -e '
       use B;
       # color combinations that are readable (e.g. no red on red)
       @c =(map { "$_\n0\n" }
            6..7,9..11,13..15,40..51,75..87,113..123,147..159,171..231,249..254),
           (map { "$_\n231\n" }
            1..9,12..13,16..45,52..81,88..116,124..151,153,160..180,
            182..185,187..189,196..214,232..252,255..254);
       for(@ARGV) {
           print @c[hex(B::hash($_)) % $#c];
       }
       ' "$@"
   }
   local col=($(_colorcombos `whoami` `hostname` "`id`"))
   # (bg1,fg1)=user, (bg2,fg2)=host, (bg3,fg3)=path
   PS1='${debian_chroot:+($debian_chroot)}\[\033[48;5;'${col[0]}';38;5;'${col[1]}'m\]\u\[\033[00m\]\[\033[48;5;'${col[2]}';38;5;'${col[3]}'m\]@\h\[\033[00m\]:\[\033[48;5;'${col[4]}';38;5;'${col[5]}'m\]\w\[\033[00m\]\$ '
}

# set a fancy prompt (non-color, unless we know we "want" color)
case "$TERM" in
xterm-color)
   set_color_prompt
   ;;
xterm-256color)
   set_color_prompt
   ;;
*)
   PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
   ;;
esac

它將基於whoami,hostname和設置彩色提示id,因此如果您以不同使用者身份登錄,顏色也會有所不同。

whoami,hostname並且id被散列,並且基於散列值選擇顏色組合。對這些組合進行測試以確保它們是可讀的。

更改PERL_HASH_SEED=109以獲得不同的顏色(例如,如果兩個重要的伺服器碰巧給出相同的值)。

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