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。