终端不使用颜色提示

时间:2011-08-05 02:25:32

标签: bash history

如果我这样做:

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

注意:如果按 Enter

echo foo仍然是执行的命令

我在iTerm2和苹果终端都试过这个。

为什么要这样做以及如何解决?

2 个答案:

答案 0 :(得分:4)

试试这个:

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

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

答案 1 :(得分:1)

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

\[\]告诉bash有关非打印字符的信息;否则它不知道 你的提示实际上有多长,因此提示错误。请参阅PROMPTING部分 有关详细信息,请参阅bash联机帮助页。