虚拟控制台中的命令行提示符看起来很奇怪

虚拟控制台中的命令行提示符看起来很奇怪

在 xterm 之类的终端仿真器中,我的提示符如下所示:

[august@macmini ~]$

但在虚拟控制台中,该字符串;linux被添加到提示符前面,使其看起来像这样:

;linux[august@macmini ~]$

有谁知道“linux”字符串可能来自哪里?

答案1

事实证明,在虚拟控制台(没有窗口)中执行设置窗口标题的命令时,会出现问题。更改

PROMPT_COMMAND='printf "\e]0;%s\a" "$TERM"'

if [[ $TERM = xterm* ]]; then
    PROMPT_COMMAND='printf "\e]0;%s\a" "$TERM"'
fi

解决了问题。

答案2

只是为了好玩,下面是我设置提示的方式:

# inspiration: http://www.stumbleupon.com/su/2LpQMi 
user_host_path="${debian_chroot:+($debian_chroot) }"'\u@\h: \w'
xterm_title='\[\e]0;'"$user_host_path"'\a\]'
color_bold='\[\033[0;1m\]'
color_reset='\[\033[0m\]'
[[ $TERM == xterm* || $TERM == rxvt* ]] && first_part="${xterm_title}"
first_part+="\n${user_host_path}\n"
last_part='\! \$ '
PROMPT_COMMAND="((\$? != 0)) && PS1='${first_part}${color_bold}[\$?]${color_reset} ${last_part}' || PS1='${first_part}${last_part}'"
unset user_host_path xterm_title color_bold color_reset first_part last_part

看起来像这样:

glennj@homebase: ~
200 $ (exit 42)

glennj@homebase: ~
[42] 201 $ cd /tmp

glennj@homebase: /tmp
202 $ 

答案3

我对这里提供的解决方案不太满意,因为我对 Ubuntu 虚拟终端使用的 TERM 与其他终端相同(screen-256color)。因此,我快速查看了其他哪些环境变量可用于此目的。

我的结论是使用 XDG_VTNR(XDG 虚拟终端号?)变量。由于 Ubuntu 使用 VT#7 作为桌面环境,因此只需简单检查一下此变量是否大于或等于 7 即可。

无论如何,我都有可以构建我的提示的 bash 函数,因此我只是用针对 XDG_VTNR 变量的检查包围了标题转义序列添加。

例如,请注意粗体以下部分:

# 使用新测试(即 [[ ]]),以免在 XDG_VTNR 不存在时失败
如果 [[ $XDG_VTNR -ge 7 ]]; 那么
  # 将窗口标题转义序列添加到提示符中
别的
  # 不要将窗口标题转义序列添加到提示符中

只是想添加此注释,以防它对其他人有用。

相关内容