我想在 RHEL/CentOS 7.6 中实现
每当您这样做su
并成为 root 时,我希望该终端中的终端提示颜色在该会话期间变为红色su
。输入exit
以返回到您是谁,我希望提示颜色返回到之前的颜色(黑色)。
与使用 putty 通过网络登录的 SSH 窗口相同:最初 ssh in as用户并有默认的白色 shell 提示符;执行su
root 操作,我希望提示符变为红色;输入 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 后变为红色,并在退出时返回白色。