Повторение приглашения оболочки при использовании 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 на каждой машине

Другие вопросы по тегам