我的 PS1 中的多行命令混乱不堪

我的 PS1 中的多行命令混乱不堪
declare __host='\[\e[30;102m\] \h \[\e[0m\]';
declare __dir='\[\e[1;97;44m\] \w \[\e[22m\]';
declare __arrow='\[\e[1m\]▸ \[\e[0m\]';

function __git_status() {
  local info;
  info=$(__git_info) && printf '\e[30;43m%s' "$info";
}

PS1="$__host$__dir"'$(__git_status)'"$__arrow ";

当我执行多行命令时,它们会回绕到起始行。我确信这与我的 PS1 中的越狱有关。我几乎尝试了我能想到的一切,但最终一无所获。我将不胜感激任何和所有的帮助。

目标是让箭头的背景颜色采用上一节的颜色。如果我在 git 存储库中,它应该是黄色的。如果不是的话,它应该是蓝色的。

在此输入图像描述 在此输入图像描述

答案1

解决方案是改变:

info=$(__git_info) && printf '\e[30;43m%s' "$info"

info=$(__git_info) && printf '\1\e[30;43m\2%s' "$info"

这是因为在执行我的 __git_status 函数之前,bash 在内部将提示特殊字符 [ 和 ] 替换为 ASCII 1 和 2。

相关内容