PS1
私の中に私のもの~/.bash_profile
:
export PS1="\\n\[\033[38;5;246m\]\u@\[\033[38;5;245m\]\h\[\033[38;5;15m\] \[\033[38;5;28m\]\w\[\033[38;5;15m\]\[\033[38;5;2m\]`__git_ps1`\[\033[38;5;15m\] \[\033[38;5;90m\]\t\[\033[38;5;15m\] \[\033[38;5;232m\]\[\033[38;5;15m\] \n\[\033[38;5;0m\]\\$ "
(申し訳ありませんが、私のカラーコードにエイリアスはありません。このヒントはオンラインエディタを使用して作成しました。)
しかし、切り替えると、現在表示されているブランチは常に間違っています。
なぜこれが起こるのかわかりません。コマンドのみを実行すると正しい値が得られます。
$ echo `__git_ps1`
(dev)
.bash_profileを取得すると、新しい値が表示されます(ただし、次回の切り替え時にエラーが発生します)。私は何が間違っていましたか?
ベストアンサー1
export PS1="…`__git_ps1`…"
`__git_ps1`
このコマンドは内部二重引用符を使用してコマンドを実行し__git_ps1
、その出力(およびその他の周辺テキスト)を変数に割り当てますPS1
。したがって、プロンプトには、.bash_profile
実行時に決定された分岐が表示されます。
__git_ps1
Bashがプロンプトを表示するたびにこのタスクを実行する必要があります。 (実際にgit情報が変わるまで再度実行する必要はありませんが、検出するのは難しいです。)これを行うには2つの方法があります。
`__git_ps1`
変数にリテラルテキストを含めますPS1
。以下を使用して、プロンプト文字列のシェル拡張を実行するように bash が構成されていることを確認します。promptvars
オプションオンはデフォルトで設定されていますが、を使用してオフにすることができますshopt -u promptvars
。PS1='\n\[…\]$(__git_ps1)\[…\]\$ '
次のコマンドを実行してプロンプトの内容を更新します。
PROMPT_COMMAND
変えるupdate_PS1 () { PS1="\\n\\[…\\]$(__git_ps1)\[…\]\\$ " } shopt -u promptvars PROMPT_COMMAND=update_PS1
しかし、プロンプトはグローバル設定ではなくシェル構成なので、~/.bashrc
代わりにに設定する必要があります~/.bash_profile
。