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"

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

おすすめ記事