bash提示行设置问题

bash prompt line setting issue

我用xshell连接centos的云服务,我把/etc/bashrc里的$PS1值设置为\e[0;34m[\u@\h \W]$ \e[m,这样我的promt就变成了蓝色,这样我可以分辨哪个是我的命令输入,哪个是输出。

但是,如果我的命令多于一行,则此提示无法自动添加新行。如果一行已满,它就从同一行的左侧开始填充。可以看到截图如下:

我要的是命令写满一行就自动换行

我试过 \n 但只是在命令前添加了一个新行,这不是我想要的效果.

现在试了PS1='[\e[0;34m[\u@\h \W]$ \e[m]',效果是这样的:

bash 无法判断您的提示实际在屏幕上占据了多少 space,因为设置颜色的 ANSI 转义序列不占用任何 space。您需要将它们(并且 它们)包含在 \[...\] 中以尽可能多地告诉 bash

PS1='\[\e[0;34m\][\u@\h \W]$ \[\e[m\]'

bash 已经知道如何处理自己的转义序列 \u\h\W。 ANSI 转义序列仅对 终端.

有特殊意义

也就是说,\u 之前展开 bash 尝试确定提示中有多少个字符。就其所知,\e[0;34m 都将是按字面显示为单个字符。终端看到它们,而不是显示它们,而是更改用于打印以下字符的颜色。