如何使终端以粗体显示user @ machine?


31

我在一些屏幕截图(不记得在网络上的什么地方)中看到终端可以显示[username@machine /]$粗体字母。我也很期待得到这个,因为我总是发现自己在长输出中滚动,很难找到我命令后的第一行。

如何使用户名等加粗或着色?


您能说明您使用的是bash shell还是其他shell?
Stephen Quan

侏儒终端重击。
本杰明·

Answers:


22

您应该可以这样设置文件中的PS1提示变量来做到这~/.bashrc一点:

PS1='[\u@\h \w]\$ '

为了使其具有颜色(可能是粗体,这取决于您的终端仿真器是否启用了它),您需要添加转义颜色代码:

PS1='\[\e[1;91m\][\u@\h \w]\$\[\e[0m\] '

在此处,1;91m和之间没有逃脱的所有内容0m将以1;91彩色(粗体红色)上色。将这些转义码放在提示的不同部分以使用不同的颜色,但是请记住使用重置颜色,0m否则您将获得彩色的终端输出。请记住,之后再获取文件以更新当前的shell:source ~/.bashrc


为什么不使用31表示红色?91似乎不是标准代码。
jw013

1
@ jw013如果用作粗体(即1;31和),则90-97的范围等于30-37的范围1;91。使用常规字体粗细,90-97范围将提供比其他字体更亮的颜色。

45

找到您的PS1位置,.bashrc然后'\[\e[1m\]'在开头和\[\e[0m\]结尾处插入。

  • \[并且这\]是必需的,以便外壳程序知道内部的混乱占据了屏幕上的0空间,这可以防止在进行行编辑时出现某些混乱的行为。您不必为此太担心。
  • \e[被称为CSI(控制序列引入器)。您会看到它在引用的Wikipedia页面上列出的大多数代码中使用。\e 表示转义字符。
  • 如果您在Wikipedia页面上的SGR表中查找,您会看到1是亮/粗体的数字,而0是重置的数字。因此CSI 1m打开粗体并CSI 0m重置字体,以便其余文本正常。

维基百科提供了ANSI逸出代码的完整列表,如果终端仿真器支持,则可以使用它。

编辑

为了可移植性和可读性,您应该使用tput而不是硬编码转义码。唯一的缺点是,该tput方法不适用于支持ANSI代码但terminfo数据库损坏或丢失的终端,但是在这种情况下,terminfo损坏是一个更大的问题,因为许多依赖terminfo的控制台应用程序可能无法正常工作。

这是我在我的工作中的一个示例.bashrc

# color names for readibility
reset=$(tput sgr0)
bold=$(tput bold)
black=$(tput setaf 0)
red=$(tput setaf 1)
green=$(tput setaf 2)
yellow=$(tput setaf 3)
blue=$(tput setaf 4)
magenta=$(tput setaf 5)
cyan=$(tput setaf 6)
white=$(tput setaf 7)
user_color=$green
[ "$UID" -eq 0 ] && { user_color=$red; }
PS1="\[$reset\][\[$cyan\]\A\[$reset\]]\[$user_color\]\u@\h(\l)\
\[$white\]:\[$blue\]\W\[$reset\][\[$yellow\]\$?\[$reset\]]\[$white\]\
\\$\[$reset\] "

这是我的通用版本的样子。在0为最后一个命令的退出状态。

PS1屏幕截图


不错的解释性答案,+ 1。不过,我仍然找到了hesse的答案,所以我选择了它。
本杰明

尝试此操作时,遇到了终端提示无法正确包装的问题。你呢?您有更新的转义序列吗?
Stefan Lasiewski

6

这是您进入cygwin bash shell的默认提示:

PS1='\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \[\e[33m\]\w\[\e[0m\]\n\$ '

在此处输入图片说明

\[\e]0;\w\a\] = Set the Window title to your current working directory
\n            = new line
\[\e[32m\]    = Set text color to green
\u@\h         = display username@hostname
\[\e[33m\]    = Set text color to yellow
\w            = display working directory
\[\e[0m\]     = Reset text color to default
\n            = new line
\$            = display $ prompt

参考文献:


很好,我在[user @ host]之前添加了新行,这使每个命令都更具可读性(应在终端imo上将其设置为默认设置)。
本杰明·

2

我使用此shell函数在终端中获取文本属性:

color () {
  if [ -z "$1" -a -z "$2" -a -z "$3" ]; then
    echo "\033[0m"
    return
  fi
  case $1 in
    black)   color_fg=30;;
    red)     color_fg=31;;
    green)   color_fg=32;;
    yellow)  color_fg=33;;
    blue)    color_fg=34;;
    magenta|purple) color_fg=35;;
    cyan)    color_fg=36;;
    white)   color_fg=37;;
    -)       color_fg='';;
    *)       color_fg=39;;
  esac
  case $2 in
    bold)      color_bd=1;;
    italics)   color_bd=3;;
    underline) color_bd=4;;
    inverse)   color_bd=7;;
    strike)    color_bd=9;;
    nobold)      color_bd=22;;
    noitalics)   color_bd=23;;
    nounderline) color_bd=24;;
    noinverse)   color_bd=27;;
    nostrike)    color_bd=29;;
    -)         color_bd='';;
    *)         color_bd=0
  esac
  case $3 in
    black)   color_bg=40;;
    red)     color_bg=41;;
    green)   color_bg=42;;
    yellow)  color_bg=43;;
    blue)    color_bg=44;;
    magenta|purple) color_bg=45;;
    cyan)    color_bg=46;;
    white)   color_bg=47;;
    -)       color_bg='';;
    *)       color_bg=49;;
  esac
  s='\033['
  if [ -n "$color_bd" ]; then
    s="${s}${color_bd}"
    if [ -n "$color_fg" -o -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_fg" ]; then
    s="${s}${color_fg}"
    if [ -n "$color_bg" ]; then
      s="${s};"
    fi
  fi
  if [ -n "$color_bg" ]; then
    s="${s}${color_bg}"
  fi
  s="${s}m"
  echo "$s"
  unset s color_bd color_bg color_fg
}

然后使用它:

color_reset=`color`
color_grbd=`color green bold`
color_bubd=`color blue bold`
PS1="\[${color_grbd}\][\u@\h]\[${color_reset}\]:\[$color_budb}\]\w\[${color_reset}\]> "

这给了我[username@hostname]:cwd>这里username@hostname大胆的绿色和cwd大胆的蓝色。


谢谢你 我想我还必须复制以上所有内容~/.bashrc
本杰明·

是的,我将其设置在~/.bashrc文件中,并用它来设置提示。我什至根据我所使用的系统更改颜色。
Arcege'2

1

要使其看起来像默认的Ubuntu提示符,请添加

export PS1='\[\e[1;32m\]\u@\h\e[0;39m\]:\e[1;34m\]\w\e[0;39m\]$\[\e[0m\] '

在你的~/.bashrc

这将产生众所周知的绿色user@host(粗体),然后是非粗体白色冒号,接着是工作目录,以粗体蓝色表示,接着是一个$符号,一个空格,以及以非粗体白色字母表示的命令:

Ubuntu Bash提示

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.