この bash プロンプトの何が問題なのでしょうか?

この bash プロンプトの何が問題なのでしょうか?

~/.bashrcプロンプトを色分けし、git リポジトリの現在のブランチを表示するには、ファイル内の次のエントリを使用します。

PS1='\[\e[1;32m\]\[\u@\h\]\[\e[m\] \[\w\]\[\e[1;1m\]\[$(__git_ps1 " (%s)")\] \[\e[1;1m\]\[$\] \[\e[m\]'

これはほぼ正常に動作しますが、bash 履歴 (上矢印キーを数回) を使用すると、コマンド ラインが「アウトデント」され (プロンプトの最初の文字だけがそのまま残ります)、次のように表示されます。

usemmand

user私のユーザー名が で、コマンドが の場合command

答え1

\[\]コマンドプロンプトの次の部分でのみ使用してください。しないでください実際のテキストがあるにもかかわらず、カーソルを進めます。目に__git_ps1見える出力を生成すると、コマンド ラインが同期されなくなります。

答え2

正しいバージョンは次のとおりです:

COLOR1="\[\e[1;32m\]"
COLOR2='\[\e[1;1m\]'
COLOR3='\[\e[m\]'
GIT_STATUS=$(__git_ps1 " %s")
PROMPT_CHAR="$"

PROMPT="${COLOR1}\u@\h${COLOR3} \w${COLOR2}${GIT_STATUS} ${COLOR2}${PROMPT_CHAR} ${COLOR3}"
PS1="$PROMPT"
export PS1

答え3

この問題に取り組んでいる人のために、私にとってうまくいった例を次に示します。

前に:

export PS1="\033[0;33m[\u@\h]\033[1m\e[m \w \033[36m[>>]\033[0m\e[m "

後:

export PS1='\[\033[0;34m\][\u@\h]\[\033[1m\e[m\] \w \[\033[35m\][>>]\[\033[0m\e[m\] '

'\\[\\]'周りの色をすべてメモします。

関連情報