在ansi-term中使用ssh时,Shell会提示重复

时间:2013-07-10 19:48:50

标签: emacs ansi-term

当我使用SSH从emacs中的ansi-term会话登录到Ubuntu 12.04计算机时,提示显示错误:

0;ubuntu@jumplin: ~ubuntu@jumplin:~$

这应该如下所示:

ubuntu@jumplin:~$

我已经尝试了一些关于utf-8和颜色支持的建议,但它们似乎没有用(颜色目前在ansi-term中工作正常):

Strange characters in ansi-term in emacs

我认为它可能与不受支持的ansi转义码或类似的东西有关,但我不太确定 - 此终端会话的PS1值是:

\[\e]0;\u@\h: \w\a\]${debian_chroot:+($debian_chroot)}\u@\h:\w\$

任何建议都会非常感激:)当终端会话中出现奇怪的角色时,我似乎总是有点迷失。

3 个答案:

答案 0 :(得分:4)

你的提示中的

\[\e]0;\u@\h: \w\a\]是配置你的xterm(?)的标题栏。尽管ansi-term支持ANSI着色,但操纵标题栏的转义序列却不支持。这就是为什么你看到提示重复两次 - 第一部分应该转到标题栏。

因此,要么从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-termTERM将等于eterm-color,您可以进行具体测试。

答案 1 :(得分:0)

感谢上面的Alex Vorbiev's回答我在ssh进入运行bash的Ubuntu 14.04环境时解决了这个问题,从我在MacOSX上的Emacs 24.5开始,只需在.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' termmulti-term个包以及echo $TERM返回xterm-256color

答案 2 :(得分:0)

我不知道这是否适用于ansi-term,但我对eshell有同样的问题,我用这个别名修复了

alias ssh 'ssh $1 -t "export TERM='dumb';bash -l"'

这将确保未在ssh'd计算机上设置PROMPT_COMMAND变量。使用此别名也无需在每台计算机上更改.bashrc