如果我这样做:
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和苹果终端都试过这个。
为什么要这样做以及如何解决?
答案 0 :(得分:4)
试试这个:
PS1="\[\e[0;30m\]test \[\e[0m\]"
通过使用额外的\[
和\]
括号,您告诉bash
您有一些非打印字符,当您按向上箭头时可能会误解
答案 1 :(得分:1)
PS1='\[\e[0;30m\]test \[\e[0m\]'
# ^^ ^^ ^^ ^^
\[
和\]
告诉bash有关非打印字符的信息;否则它不知道
你的提示实际上有多长,因此提示错误。请参阅PROMPTING
部分
有关详细信息,请参阅bash联机帮助页。