![使用终端/ssh时不同机器有不同的颜色提示?](https://linux22.com/image/535255/%E4%BD%BF%E7%94%A8%E7%BB%88%E7%AB%AF%2Fssh%E6%97%B6%E4%B8%8D%E5%90%8C%E6%9C%BA%E5%99%A8%E6%9C%89%E4%B8%8D%E5%90%8C%E7%9A%84%E9%A2%9C%E8%89%B2%E6%8F%90%E7%A4%BA%EF%BC%9F.png)
我有 5 台机器,我经常通过 ssh 连接它们来工作。当我在错误的机器上发出错误的命令时,我越来越沮丧。幸运的是,我还没有做任何坏事。我想知道是否有任何可以硬编码的 hack,可以根据我 ssh 连接的机器以不同的颜色显示我的提示符?例如桌面 1 为蓝色,笔记本电脑为紫色,服务器为红色等?这可能吗?
目前我正在使用此命令 export PS1="\e[0;31m[\u@\h \W]\$ \e[m " 取自此处http://www.cyberciti.biz/faq/bash-shell-change-the-color-of-my-shell-prompt-under-linux-or-unix/ 但它显然不能通过 ssh 工作。
另外,如果您还有其他很酷的 bash 技巧可以帮助我缓解视力问题,那就太好了。我得到了这个技巧,它为手册页着色。
http://linuxtidbits.wordpress.com/2009/03/23/less-colors-for-man-pages/
答案1
我使用的方法是,根据主机名生成主机名的颜色。可供选择的颜色不多,因此很容易产生冲突,但对于我管理的少量机器来说,这种方法很有用。
hostnamecolor=$(hostname | od | tr ' ' '\n' | awk '{total = total + $1}END{print 30 + (total % 6)}')
PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\[\e[${hostnamecolor}m\]\]\h \[\e[32m\]\w\[\e[0m\]\n$ '
第一行根据机器的主机名生成一个介于 30 (inc) 和 36 (exc) 之间的数字。第二行将其应用于提示符,其中用户名和路径为绿色 (32),主机名为生成的颜色。
没有设置背景颜色,并且我从前景中排除青色(36)和白色(37)以避免与我使用的终端的背景发生冲突。
答案2
你走的路是对的。我已经使用了你链接的页面上详细介绍的方法,并且在我的博客上详细说明如何。对我来说,使用 Windows 机器上的 PuTTY 以及从一个 CentOS 服务器到另一个 CentOS 服务器的 SSH 都可以正常工作。如果它不工作,并且您确定语法正确,则可能是您的 SSH 客户端出了问题。
答案3
在我的工作中,我们有不同阶段的服务器
生产阶段开发
我使用红色提示符作为产品,绿色提示符作为暂存。现在所有暂存机器在域中都有 stg。
因此产品将是
web1.domain.com
web2.domain.com
Staging/Dev 将是
stg-web1.domain.com
stg-web2.domain.com
dev-web1.domain.com
etc
这只适用于 redhat/centos
但对于生产服务器,我有以下内容
/etc/sysconfig/bash-prompt-xterm
里面是
export PS1="\[[\e[1;31m\]\u@\[\e[1;31m\]\h\[\e[0m\] \W] "
这会使提示变成红色。现在您无法触碰 /etc/bashrc,并且所有其他非生产机器将保持您使用的正常前景色。但我将它们变成绿色
if [ "$PS1" ]; then
case $TERM in
xterm*)
if [ -e /etc/sysconfig/bash-prompt-xterm ]; then
PROMPT_COMMAND=/etc/sysconfig/bash-prompt-xterm
else
PROMPT_COMMAND='echo -ne "\033]0;${USER}@${HOSTNAME%%.*}:${PWD/#$HOME/~}"; echo -ne "\007"'
fi
;;
那个 if 块应该在那里..我只是将 else 部分的颜色改为绿色.. 33 是绿色
答案4
我们正在研究更全面的基于主机名字符串校验和的解决方案这个要点包括 256 种颜色兼容性。除了您实际上有兴趣亲自确定每台服务器的特定颜色的情况外,我认为这是那些“这就是我们拥有计算机的目的”问题之一,因此根据校验和为您确定“随机”颜色应该是一种好方法。