web-dev-qa-db-ja.com

bashプロンプトが更新されないのはなぜですか?

私はgitが初めてで、現在のgitブランチを既存のプロンプトに追加しようとしています。これは次のように定義されています。

_RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

export PS1="${RESET}${YELLOW}\u@\h${NORMAL} \`${SELECT}\` ${YELLOW}\w $(__git_ps1) >${NORMAL} "
_

私は(もう一度_.bashrc_ファイルを調達して)それを試してみましたが、うまくいくように見えましたが、別のブランチに行って更新しませんでした。 $(__git_ps1)がキャッシュされていないことを確認するにはどうすればよいですか?

78
greg0ire

_$_にはバックスラッシュが必要なので、すぐに展開されません。 ($(...)を記述する別の方法である_`...`_と比較してください。)

_export PS1="${RESET}${YELLOW}\u@\h${NORMAL} \`${SELECT}\` ${YELLOW}\w \$(__git_ps1) >${NORMAL} "
_

単一引用符の使用については@MikeSepに同意しますが、実際には色などをすぐに置き換える方が少し最適です。必要ではありませんが、やや良いです。つまり、単一引用符を使用すると、何が起こっているのかがわかりやすくなりますis

123
geekosaur

おそらくPS1文字列は保存される前に評価されますが、コマンドプロンプトを取得するたびに__git_ps1コマンドを実行する必要があります。 export PS1='${RESET}...'行には二重引用符ではなく単一引用符を使用することをお勧めします。

21
Mike Seplowitz