如何根据登录用户更改屏幕的硬状态颜色?

EGr*_*EGr 8 colors bash gnu-screen bashrc

我有一段时间没有编辑/创建 .screenrc 文件,但这是我目前使用的:

# Turn off the screen startup message
startup_message off

# Define format of bottom navigation/status/date/etc. line
hardstatus alwayslastline "%{yk}[ %H ] %-Lw%50>%{gk}(%{-}%n-%t%{gk})%{-}%+Lw%< %=%{yk}[ %c %d.%m.%Y ]"

# Increase scrollback buffer to 30000 lines
defscrollback 30000
Run Code Online (Sandbox Code Playgroud)

老实说,我不记得我的 hardstatus 行中的所有内容代表什么,但我想弄清楚如何根据登录的用户更改主机名颜色。这可能吗?现在,当我以任何用户登录时,主机名是黄色的;但如果我是 root,我希望它是红色的。这是可以在我的 .bashrc 文件中更改的内容吗?我在我的 .bashrc 中有这个来将新的屏幕窗口名称更改为我连接到的服务器的主机名:

# Set screen window title
case "$TERM" in
screen)
  PROMPT_COMMAND='echo -ne "\033k$HOSTNAME\033\\"'
  ;;
esac
Run Code Online (Sandbox Code Playgroud)

谢谢你的帮助!

编辑

我已经尝试将它添加到我的 .bashrc 文件中,但它只是将 ANSI 代码放在我的屏幕硬状态中主机名的前面:

case "$TERM" in
screen)
  if (( $UID == 0 )); then
    PROMPT_COMMAND='echo -ne "\033k$FRED$HOSTNAME$RS\033\\"'
  else
    PROMPT_COMMAND='echo -ne "\033k$HOSTNAME\033\\"'
  fi
  ;;
esac
Run Code Online (Sandbox Code Playgroud)

编辑 2

我还在上面的语句中添加了实际的 ANSI 颜色代码(例如:)\[\033[31m\]和屏幕转义代码(例如:),但都不起作用。%kr.bashrc

编辑 3

如果我使用它作为提示命令行,主机名会在我的 PS1 前面显示为红色:

PROMPT_COMMAND='echo -ne "\033[31m$HOSTNAME\033\\"'
Run Code Online (Sandbox Code Playgroud)

如果我使用以下提示,窗口名称将更改为主机名(是!);但颜色仍然是默认的(不!):

PROMPT_COMMAND='echo -ne "\033[31m\033k$HOSTNAME\033\\"'
Run Code Online (Sandbox Code Playgroud)

我也试过用屏幕颜色转义 (%kr)替换\033[31m(并且只是[31m),但这也不起作用。

slm*_*slm 1

看看这个 U&L 问答。

具体来说这个答案,https://unix.stackexchange.com/a/16433/7453

总体思路是,您维护 2 个不同的screenrc颜色文件,并根据文件$USER中的bashrc颜色将环境变量指向SCREENRC给定用户的环境变量。