如何正确自定义PS1?

Ahu*_*ri3 6 bash prompt

我在我的 bashrc 中用这个自定义了我的 bash

export PS1="\e[0;36m\h\e[m \e[0;33m\w/\e[m \e[0;31m\n\$ ?\e[m  "
Run Code Online (Sandbox Code Playgroud)

所以我得到了这样的东西(带有颜色):

Ahuri ~/Public/ 
$ ?  
Run Code Online (Sandbox Code Playgroud)

但是我在使用长命令时遇到了问题。当我写一个比一行长的很长的命令时,它开始覆盖我的第一行

例子 :

Ahuri ~/Public/ 
$ ? ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

如果我继续添加“^”,我会得到:

Ahuri ~/Public/ 
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

我的“$?” 被覆盖,然后整行被覆盖。

man*_*ork 9

没有问题\n。这又是旧的转义序列长度问题:\e[0m并且类似的不会影响提示的实际长度,因此您必须将它们括在\[.. 中\]以向解释器表明这一点:

PS1="\[\e[0;36m\]\h\[\e[m\] \[\e[0;33m\]\w/\[\e[m\]\n \[\e[0;31m\]\$ ?\[\e[m\]  "
Run Code Online (Sandbox Code Playgroud)