0

我开始管理基于 CentOS 的新服务器。我想更改提示,所以我编写了以下命令:

PS1="\e[0;36m[`pwd`]\$\e[m"

它工作得很好。但是因为我遇到了一个烦人的问题。当我写了很长的东西,或者使用向上箭头显示一个很长的旧命令,或者粘贴它,然后单击“home”到达行首时,光标停止在命令内,前面有 10 个字符的提示。例如,假设我写了这个:

[/]$ git log --pretty=oneline

然后点击home键,光标会停在“--”后面的“p”字母上。而且,如果我尝试用左键移动以到达该线的顶部,它会发出恼人的 bip 说“你已经在那里,伙计”......

现在,假设我写了

ls

紧接着

git log --pretty=oneline

如果我上升两次,提示将显示:

[/]$ git log --ls

如果我继续往上走,“git log --”就永远不会消失。现在如果我按回车,它仍然会毫无问题地启动 ls 命令。好像只是显示问题。但是,这一直让我感到困惑......

提前感谢您的帮助!

4

1 回答 1

2

用于\w在 shell 提示符中打印工作目录,而不是尝试嵌入命令。

您还需要转义转义序列,以便 bash 不会尝试将它们计为打印字符。这是通过用\[和括起来来完成的\]

所以你最终应该得到类似的东西:

PS1="\[\e[0;36m\][\w]\$\[\e[m\]"

您的提示也非常紧凑,您可能需要在其中添加一些空格。关键是您已使用方括号来转义不可打印的字符。

您可以在 bash 手册页的 PROMPTING 部分找到这些替换的完整列表。

于 2013-12-07T22:28:05.893 回答