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"
これは、bashが__git_status関数を実行する前に、内部的にプロンプト特殊文字[と]をASCII 1と2に置き換えるためです。