Bash PS1 自定义提示中的长行重叠

Ada*_*tan 13 bash prompt ps1

我已经配置了一个花哨的两行PS1bash 提示符,其中包含服务器名称、时间、用户名和其他有用的变量。

PS1="\n\[\033[1;34m\]\342\226\210\342\226\210 \u @ $SERVER_NAME""$BBlue"" \w""$Color_Off  \n\[\033[0;36m\]\342\226\210\342\226\210 \d \t $ \[\033[0;39m\]"
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

完整的 Github 源在这里

问题是长线通常会缠绕在自身周围,这意味着新线会与前线重叠。

问题是不一致的:有些行被正确包裹,有些则没有。

知道如何解决这个问题吗?

小智 16

这是我用于 bash 提示的花哨的两行 PS1。

PS1

\[\e[1;32m\]\H\[\e[0m\] :: \[\e[1;30m\]\d\[\e[0m\] \@ :: \[\e[1;33m\]\w\n\[\e[1;34m\]\u $ \[\033[0m\]
Run Code Online (Sandbox Code Playgroud)

所以这就是我所做的。如果这是我的颜色:

\e[1;32m
Run Code Online (Sandbox Code Playgroud)

我把它改成:

\[\e[1;32m\]
Run Code Online (Sandbox Code Playgroud)

本质上,您需要将其包含在:

\[$mycolor\]
Run Code Online (Sandbox Code Playgroud)

结帐这个答案


Ada*_*tan 7

在网上找到了这个解决方案,它建议了颜色变量的右括号:

改变这个:

Black='\e[0;30m'        # Black
Red='\e[0;31m'          # Red
Green='\e[0;32m'        # Green
Run Code Online (Sandbox Code Playgroud)

到:

Black='\e[0;30m\]'        # Black
Red='\e[0;31m\]'          # Red
Green='\e[0;32m\]'        # Green
Run Code Online (Sandbox Code Playgroud)

我已经提交了更改- 希望它按预期工作。

  • 不确定这应该达到什么目的。您需要将任何不占用空间的内容(ansi 转义符)包装在 `\[` `\]` 中,因此您不能只用 `\]` 结束所有 ansi 转义颜色,因为如果没有怎么办不是`\[`。当您输入不可打印的字符时,您应该将它们包装在 `\[` `\]` 中(例如 `PS1='\[\e[32;1m\] 绿色提示符 \[\e[0m\] $'`)。 (2认同)