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


83

私は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)がキャッシュされていないことを確認するにはどうすればよいですか?


14
私が持つのアイデアを愛する:):(あなた:)最後のコマンドが失敗したかどうかに応じて、プロンプトに
マーク・Longair

@マークLongair:私はここでそれを見つけた:serverfault.com/questions/4889/...ところで、あなたはあなたのソリューションを削除しなかった理由、それはあまりにも動作します!
greg0ire 2011年

それは他の2つより数分遅れており、とにかく@geekosaurよりもきちんとしていません
Mark Longair

1
この正確な質問をしてくれてありがとう(そしてもちろん、彼の答えをgeekosaurに)!.bashrcファイルをソースしたときにプロンプ​​トがgitステータス行のみを更新していた理由を理解しようと何時間もぶらぶらしてきました。
coredumperror 2013年

回答:


132

$すぐに展開されないように、円記号が必要です。(`...`別の書き方である、と比較してください$(...)。)

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

一重引用符の使用については@MikeSepに同意しますが、実際には、色などをすぐに置き換える方が少し最適です。必要はありませんが、少しだけ良いです。それは言っているあなたは、単一引用符を使用した場合に何が起こっているのか理解しやすいです。


2
また、ターミナルプログラム以外のもの(Emacs / Vimコマンドバッファーscreenなど)で直接作業する場合tputは、ハードコードされたカラーエスケープの代わりに使用することを検討することをお勧めします。
geekosaur 2011年

1
この場合、色変数を置き換える必要があります。少なくとも、@ MikeSepの提案でエスケープコードを取得するだけですが、あなたのコードは正常に機能します。(+1)
Mark Longair 2011年

@マーク:それは興味深いです。${SELECT}1は、再帰的な評価が行われていることを示しています。多分それはコマンドのためだけですか?何が起こっているのかを理解するのが簡単なので、私は通常、代わりにPS1関数を使用します。
geekosaur 2011年

あなたは@geekosaurおかげ
smonff

3
男、あなたは命の救世主です。質問があります。MBPとiMacがあります。同じ.bash_profile、同じバージョンのbash(homebrew経由でインストール)。MBPで、の前に\を追加し$(__git_ps1)ないと、評価されません。iMacで同じことをすると、\がなくても評価されます。これがどのように起こり得るかについて何か考えはありますか?
molli 2014年

24

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


動作するかもしれませんが、すべてのシステムを一重引用符に変換するのに問題があるので、geekosaurのソリューションを使用します。しかし、あなたも私の賛成を得ます。
greg0ire 2011年

ああ、そうです。彼の方がいいです-私は色の地元の変数を逃しました。とにかく投票してくれてありがとう。:)
Mike Seplowitz 2011年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.