root 时的红色终端字体

root 时的红色终端字体

我想在 RHEL/CentOS 7.6 中实现

每当您这样做su并成为 root 时,我希望该终端中的终端提示颜色在该会话期间变为红色su。输入exit以返回到您是谁,我希望提示颜色返回到之前的颜色(黑色)。

与使用 putty 通过网络登录的 SSH 窗口相同:最初 ssh in as用户并有默认的白色 shell 提示符;执行suroot 操作,我希望提示符变为红色;输入 exit 我希望提示符恢复为白色。

到目前为止,我做到了这一点,但它并没有 100% 工作,在你输入exit并离开 su 会话并返回到原来状态后,颜色保持红色用户

/etc/profile.d/red_root_prompt.sh

if [ $UID -eq 0 ]; then
   PS1="\e[31m[\u@\h \W]# "
else
   PS1="[\u@\h \W]# "

有没有办法让事情按照我想要的方式发生?我只想要它用于 bash shell。

答案1

您可以将其添加到/etc/bash.bashrc或编辑/etc/profile/

force_color_prompt=yes

    if [ "$LOGNAME" = root ] || [ "`id -u`" -eq 0 ] ; then
        PS1='\[\033[01;31m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[01;34m\]#\033[00m\] '
    else
        PS1='\u@\h:\w\$ '
    fi

你会得到一个类似这样的提示。如果您使用白色背景,请将最后一部分更改为 ,#以便\033[01;30m\]您可以看到命令文本。我将其作为第二个示例以供参考。

视觉外观

另外,如果将以下内容添加到\etc\bash.bashrc~/.bashrc 中:

export col_white='\033[00m'
export col_black='\033[01;30m'

export col_red='\033[01;31m'
export col_green='\033[01;32m'
export col_yel='\033[01;33m'
export col_blue='\033[01;34m'

您将能够执行以下操作:

$ echo -e $col_red red $col_blue blue $col_yel yellow $col_green green
 red blue yellow green

输出如下所示:

在此输入图像描述


编辑:由于某种原因,使用变量扩展作为提示符会破坏回车符(它将其锁定为变量的长度,即将其向前推了 n 个对应于echo $col_blue,的空格echo $col_white,并且到目前为止我还没有找到一个好的解决方案此时,但使用适当的括号而不使用上述变量替换可以解决此问题。

if [ "$LOGNAME" = root ] || [ "`id -u`" -eq 0 ] ; then
    PS1="$col_red\u@\h:$col_purple\w$col_green# $col_white"
else
    PS1="\u@\h:$col_blue\w$col_yel\$ $col_white "
fi

答案2

对于 RHEL/CentOS 7.x,我认为像这样的定制内容应该/etc/profile.d位于/etc/bashrc.local.这样,当类似的内容/etc/bashrc可能被更改或替换时,任何自定义都会在更新后保留。

对于 RHEL/Centos 7,我认为只需要在/etc/profile.d/其对应的 shell 下放置一个具有相应后缀的文件,

所以我/etc/profile.d/redrootprompt.sh只有

if [ "$LOGNAME" = root ] || [ "`id -u`" -eq 0 ] ; then

    PS1='[\[\033[01;31m\]\u@\h\[\033[00m\]:\w] : '

else
    PS1='[\u@\h \w] : '
fi

这非常适合我想要的外观

红色根提示符

它也适用于具有黑色背景和白色文本的腻子窗口,但在 su 到 root 后变为红色,并在退出时返回白色。

相关内容