![这个 PS1 提示有什么问题?](https://linux22.com/image/1575229/%E8%BF%99%E4%B8%AA%20PS1%20%E6%8F%90%E7%A4%BA%E6%9C%89%E4%BB%80%E4%B9%88%E9%97%AE%E9%A2%98%EF%BC%9F.png)
我将 PS1-Prompt 的样式设计得类似于 iPython-Prompt,如下所示:
PS1FIRSTLINE="\[\n\][\t] \[\e[1m\e[38;5;196m\]\u@\H\[\e[0m\] in \[\e[1m\e[38;5;196m\]\w\[\e[0m"
PS1SECONDLINE="\n\e[92m\]In [\[\e[1m\]\#\[\e[0m\]] \$ "
PS1="$PS1FIRSTLINE$PS1SECONDLINE"
但是,有时我会遇到一些奇怪的问题,例如,提示后最后执行的命令的开头仍然存在并且无法删除。
我认为这是我转义颜色的方式的问题,\e[ ... ]
而不是我使用的 bash 或 suckless 终端的问题。
有人能帮我吗?
答案1
初见这个答案我的。
目前还不清楚是否\n
应该被视为可打印或不可打印,或者这种划分是否等同于可打印与不可打印(就像在可打印 ASCII 字符)。
然而,说到PS1
,我认为\n
应该称之为“打印”,因为它会影响提示的大小,而这才是这里最重要的。您应该将 的两个出现都放在\n
之外\[ \]
。
第一个\n
明确地位于 内\[ \]
。第二个(在 的开头PS1SECONDLINE
)乍一看似乎不在,但实际上也是如此。\[
中有一个不匹配的PS1FIRSTLINE
,当整体PS1
被创建时,匹配\]
来自PS1SECONDLINE
。
\n
这些是经过适当修改并放在外面的变量\[ \]
:
PS1FIRSTLINE="\n[\t] \[\e[1m\e[38;5;196m\]\u@\H\[\e[0m\] in \[\e[1m\e[38;5;196m\]\w\[\e[0m\]"
# ^^ deleted embracing \[ \] added closing ^^
PS1SECONDLINE="\n\[\e[92m\]In [\[\e[1m\]\#\[\e[0m\]] \$ "
# ^^ added opening
PS1="$PS1FIRSTLINE$PS1SECONDLINE"