我最近稍微调整了一下我的 PS1。代码如下:
PS1='$(if [[ $? != 0 ]]; then echo " \e[91m\e[0m"; fi) \u $(assemble_prompt)$ '
缺失的字符来自书呆子字体在我的问题(以及assemble_prompt
功能)中并不重要。
我遇到的问题是,当我将终端窗口大小缩小到提示符大小(大约)时,PS1 损坏。然后它似乎忽略 PS1 设置并将 PS1 设置为$
仅字符(参见屏幕截图)。请注意,当我开始输入时,它只会覆盖我的自定义提示。
我将问题缩小到 if 子句,如果上一个命令不成功,则添加“fail”字符。如果我删除该部分,一切都会按预期进行。
有没有办法保留if
子句部分,但修复窗口尺寸太小时 PS1 重置的问题?
PS 我使用rxvt-unicode
作为我的终端,但问题仍然存在于所有其他终端中(经过测试xterm
,st
)。
答案1
您可能想要将终端控制代码括起来,\[...\]
以告诉 Bash 它们实际上并未打印字符。否则,当它们尝试计算提示符的宽度时,会使 shell 感到困惑。
所以使用"\[\e[91m\]xxx\[\e[0m\]"
.
来自手动的:
\[ Begin a sequence of non-printing characters.
This could be used to embed a terminal control sequence into the prompt.
\] End a sequence of non-printing characters.