Повторение приглашения оболочки при использовании ssh в терминах
Когда я использую SSH для входа в систему на Ubuntu 12.04 из сеанса ANSI-Term в emacs, приглашение отображается неправильно:
0;ubuntu@jumplin: ~ubuntu@jumplin:~$
Это должно выглядеть следующим образом:
ubuntu@jumplin:~$
Я попробовал несколько советов, касающихся utf-8 и поддержки цвета, но они, похоже, не работают (в настоящее время цвет отлично работает)
Странные символы в ansi-term в emacs
Я думаю, что это может быть связано с неподдерживаемым escape-кодом ANSI или чем-то подобным, но я не совсем уверен - значение PS1 для этого терминального сеанса:
\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$
Любой совет будет высоко ценится:) Я всегда немного теряюсь, когда в терминальных сессиях появляются странные персонажи.
3 ответа
\[\e]0;\u@\h: \w\a\]
в вашем приглашении, чтобы настроить строку заголовка вашего xterm(?). Даже если цветность ANSI поддерживается ansi-term
, escape -последовательности, которые манипулируют строкой заголовка, не являются. Вот почему вы видите подсказку, повторенную дважды - первый раздел должен идти в строке заголовка.
Так что либо удалите первую последовательность из вашего PS1, либо сделайте что-то похожее на то, что предлагается в Bash Prompt HOWTO:
function proml
{
case $TERM in
xterm*)
local TITLEBAR='\[\033]0;\u@\h:\w\007\]'
;;
*)
local TITLEBAR=''
;;
esac
PS1="${TITLEBAR}\
[\$(date +%H%M)]\
[\u@\h:\w]\
\$ "
PS2='> '
PS4='+ '
}
Вы можете проверить конкретно, если вы находитесь в ansi-term
, TERM
будет равен eterm-color
,
Благодаря Alex Vorobiev, приведенному выше, я решил эту проблему, когда ssh'ing в среду Ubuntu 14.04, на которой запущен bash, из моего Emacs 24.5 на MacOSX, просто комментируя аналогичный раздел в моем .bashrc
на гостевой машине.
Вот так:
# If this is an xterm set the title to user@host:dir
# case "$TERM" in
# xterm*|rxvt*)
# PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: \w\a\]$PS1"
# ;;
# *)
# ;;
# esac
Я тогда побежал source ~/.bashrc
и подсказка не была удвоена.
Я использую Emacs term
или же multi-term
пакеты и echo $TERM
возвращается xterm-256color
Я не знаю, будет ли это работать для ansi-term
, но у меня была такая же проблема с eshell
и я исправил это с помощью этого псевдонима
alias ssh 'ssh $1 -t "export TERM='dumb';bash -l"'
Это убедит PROMPT_COMMAND
переменная не установлена на машине ssh'd. Также с этим псевдонимом нет необходимости менять .bashrc
на каждой машине