Bash Prompt 中的颜色弄乱了提示

Dav*_*ond 7 bash shell

在我的 bashrc 文件中,我的提示设置如下:

  TC_GRE="^[[0;32;40m"                                                          
  TC_RESET="^[[0m"                                                              
  PS1="${TC_GRE}i:${TC_RESET}"  
Run Code Online (Sandbox Code Playgroud)

因此,提示只是一个绿色的“i:”。当我在 shell 中工作并在历史记录中向上滚动时,我的命令行搞砸了。考虑以下:

i: shell_command_one
i: shell_command_two
i: shell_command_three
Run Code Online (Sandbox Code Playgroud)

现在,当我进入我的历史记录时,这条线可能看起来像这样:

i: shell_comshell_command_two
Run Code Online (Sandbox Code Playgroud)

如果我按回车键,它会执行 shell_command_two。(注意 shell_com 只是终端上的垃圾字符。

我怀疑这可能与非打印颜色字符有关。有谁知道如何在 bash 中解决这个问题?

ps我不确定这是否更好地发布在超级用户上,但我认为这可能是最好的,因为它是关于 bash 脚本的。

ema*_*ove 6

看起来您的 CSI颜色代码格式不正确。在你的.bashrc文件中试试这个:

TC_GRE="\[\033[0;32m\]"                                                          
PS1="${TC_GRE}i: "  
Run Code Online (Sandbox Code Playgroud)

  • 它不是格式错误的颜色代码,因为您将字符插入到打印时不会移动光标的提示中。`\[...\]` 对包装了这些字符,这样 `bash` 就不会对提示占用多少屏幕空间感到困惑。 (5认同)