在 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 ]]; 那么 # 将窗口标题转义序列添加到提示符中 别的 # 不要将窗口标题转义序列添加到提示符中 菲
只是想添加此注释,以防它对其他人有用。