终端无法使用颜色提示

发布于 2024-11-28 06:52:11 字数 527 浏览 0 评论 0原文

如果我这样做:

echo foo
PS1='\e[0;30mtest \e[0m'

然后按向上箭头 test PS1='\e[0;30mtest \e[0m' 出现(如预期)。
但是如果我按向上箭头,那么我应该有echo foo,它会导致test PS1='\e[0;3echo foo

如果我将 PS1 设置为不包含颜色的任何内容:

echo foo
PS1='\e[0;30mtest \e[0m'
PS1='test '
  • 按三次 向上箭头,结果为 echo foo

注意:echo foo 是仍然执行命令如果我按 Enter

我已经在 iTerm2 和苹果终端中尝试过这个。

为什么会这样以及我该如何解决它?

If I do this:

echo foo
PS1='\e[0;30mtest \e[0m'

and then presses the up arrow test PS1='\e[0;30mtest \e[0m' appears (as expected).
But if I press up arrow, so I should have echo foo, it results in test PS1='\e[0;3echo foo

If I set the PS1 to anything which doesn't include color it works:

echo foo
PS1='\e[0;30mtest \e[0m'
PS1='test '
  • triple press up arrow, results in echo foo

Note: echo foo is still the command executed if I press Enter

I have tried this in both iTerm2 and the apple Terminal.

Why is it doing that and how do I fix it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

雨轻弹 2024-12-05 06:52:11

试试这个:

PS1="\[\e[0;30m\]test \[\e[0m\]"

通过使用额外的 \[\] 括号,您可以告诉 bash 您有一些非打印字符,这些字符当您按向上箭头时,可能会产生误解。

Try this:

PS1="\[\e[0;30m\]test \[\e[0m\]"

By using extra \[ and \] brackets, you are telling bash that you've got some non-printing characters, which it may be misinterpreting when you press the up-arrow.

若言繁花未落 2024-12-05 06:52:11
PS1='\[\e[0;30m\]test \[\e[0m\]'
#    ^^        ^^     ^^     ^^

\[\] 告诉 bash 非打印字符;否则它不知道
你的提示实际上有多长,因此提示被破坏了。请参阅提示部分
bash 联机帮助页以获取更多详细信息。

PS1='\[\e[0;30m\]test \[\e[0m\]'
#    ^^        ^^     ^^     ^^

The \[ and \] tell bash about non-printing characters; otherwise it has no idea
how long your prompt actually is, hence the mangled prompt. See the PROMPTING section
of the bash manpage for more details.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文