Приглашение командной строки выглядит странно в виртуальной консоли

В эмуляторе терминала, таком как xterm, мое приглашение выглядит так:

[august@macmini ~]$

но в виртуальной консоли строка ;linux добавляется к приглашению, чтобы оно выглядело так:

;linux[august@macmini ~]$

Кто-нибудь знает откуда взялась строка "linux"?

3 ответа

Решение

Оказывается, что все идет не так, когда команда для установки заголовка окна выполняется в виртуальной консоли (где нет окна). изменения

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

в

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

решает проблему.

Я не был в восторге от решения, представленного здесь, поскольку я использую тот же TERM для виртуальных терминалов Ubuntu, что и другие терминалы (screen-256color). Таким образом, я быстро взглянул на то, какие другие переменные среды могут быть полезны для этой цели.

Мой вывод заключался в использовании переменной XDG_VTNR (номер виртуального терминала XDG?). Так как Ubuntu использует VT#7 для среды рабочего стола, простая проверка того, является ли эта переменная больше или равна 7, делает свое дело.

У меня есть функция bash, которая в любом случае создает мое приглашение, поэтому я просто окружил добавление escape-последовательности заголовка проверкой переменной XDG_VTNR.

Например, обратите внимание на выделенную жирным шрифтом часть ниже:

# Используйте новый тест (т. Е. [[ ]]), Чтобы не потерпеть неудачу, если XDG_VTNR не существует
if [[ $XDG_VTNR -ge 7 ]]; затем
  # Добавьте escape-последовательность заголовка окна в подсказку
еще
  # Не добавляйте escape-последовательность заголовка окна в подсказку
фи  

Просто хотел добавить эту заметку на тот случай, если она может пригодиться кому-то еще.

Просто для удовольствия, вот как я установил свою подсказку:

# 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 $ 
Другие вопросы по тегам