自定义 bash 提示符 PS1

Z0O*_*0OM 1 bash prompt

我使用以下命令自定义 bash 提示符:

PS1='\e[0;36m\u.\h
\e[0;31m $ux \e[0;92m \e[0;36m \@* \e[0;31m\w\n\e[0;92m\$ '
Run Code Online (Sandbox Code Playgroud)

输出工作正常并且看起来不错

但是当我使用箭头键在历史记录中滚动时

滚动 5-10 次后,我无法移动到行首来修改

我找到的代码/命令和

我看到最后一个命令的一部分

我执行的命令:

$ ps 辅助| grep ssh

滚动后我看到

作为提示行中的示例

$ ps aux 我只能在aux之后开始写入

所以我按 ctrl+c 换行/取消命令

我忘记了$之后的字符吗?

这是我的提示:

z4o.ubuntu
   12:46 * /
$
Run Code Online (Sandbox Code Playgroud)

当我复制/粘贴长命令时我遇到了同样的问题

Kam*_*Cuk 6

您必须将不可见的序列放入其中\[ \](或以字节为\x01 \x02单位)。请参阅 Bash 手册。

PS1='\[\e[0;36m\]printable stuff\[\e[sequence\]'
Run Code Online (Sandbox Code Playgroud)

Bash 不知道显示的字符占多少列。\e[0;36m打印 7 个字符,但不移动光标。您必须将其传达给 Bash。