如何在 emacs shell 模式下修复我的提示?

Jay*_*rod 13 bash emacs prompt

我正在同事的机器上做一些编程。他有一个我以前没用过的 emacs (23.1.1) 版本。我的问题是,当我进入 shell 模式时,我的 bash 提示符如下所示:

^[]0;jay@socrates:~^G[jay@socrates]$ 
Run Code Online (Sandbox Code Playgroud)

我已经PS1设置为'[\u@\h]\$ '.bashrc。它应该是这样的:

[jay@socrates]$
Run Code Online (Sandbox Code Playgroud)

这是它在常规外壳中的外观。我还检查了 emacs shell 中的 PS1 是否设置为正确的值,所以现在我没有想法了。我怎样才能让我的提示看起来像我想要的样子?

我已经看到一些建议使用termeshell代替shell. term有与上面相同的提示问题,并且eshell完全忽略了我的,PS1所以这并没有真正的帮助。

Pet*_*ter 13

您的 shell 正在尝试设置 XTerm(或其他控制台)的标题/标题。有多种方法可以做到这一点。

首先确保 PS1 真的是你认为的那样

echo $PS1 | less -E
Run Code Online (Sandbox Code Playgroud)

这将告诉您提示中是否有控制字符,较少会使它们看起来很有趣。假设您的提示与您所说的完全一样,那么它可能是 PROMPT_COMMAND 环境变量。你可以用同样的方式看...

echo $PROMPT_COMMAND | less -E
Run Code Online (Sandbox Code Playgroud)

如果提示命令是问题所在,那么您只需取消设置即可。在任何一种情况下,这些变量都在某处设置,如果您不在 XTerm 中,则不应设置为更新 XTerm 标头!

您可以查看“标准”bashrc (/etc/bashrc)。您应该会看到检查迭代 shell(设置为 PS1)的代码,然后检查 xterm(查看 $TERM 变量),并在那里执行与其他终端类型不同的操作。

我怀疑 bash 初始化中的某个地方是一个硬编码设置,它应该只在与 xterm 兼容的控制台程序上完成。阅读 man bash 以找到您可以查找和浏览的文件的总列表。

如果以上都失败,请尝试

printenv | less
Run Code Online (Sandbox Code Playgroud)

看看你是否能在那里找到可疑的东西,然后追踪它被设置的地方。如果您无法解决,请在此处发布。


小智 5

我遇到了完全相同的问题,这是由于 PROMPT_COMMAND。我喜欢 xterm 的标题。所以我在 ~/.emacs_bash 中添加了以下行

export PROMPT_COMMAND=""
Run Code Online (Sandbox Code Playgroud)