プロンプトって?
プロンプトとは Linux 等のターミナル上で
$
だとか
user@host $
irb(main):001:0>
みたいな感じで表示されている「ココにコマンド打てますよ」のサインの事.
bashでは PS1 変数に「どう表示させるか」の情報が格納されていて、自分で変更する事が可能
__git_ps1 関数
git にはそのプロンプトの表示を便利にするための関数が詰まった git-prompt.sh というファイルがある.
そのファイルを読み込むと
$ __git_1
とすると今の git のブランチ名が表示される関数等が使えるようになる.
読み込んで設定する
git-prompt.sh の場所はインストールした状況等によって変わるから各自に探してもらうとして、設定自体は至極簡単.
# bashrc とか bash_profile とか
. /path/to/git-prompt.sh
export PS1='\u@\h [\W $(__git_ps1)] \$ '
これで終了.
git-prompt.shが無い環境でエラーを出さないようにする
複数の環境で .bashrc を使いまわしてると「この環境ではあるけどあの環境では無い」なんて事がよくある.
一々「git-prompt.shがある版とない版」を分けてアップしたりするのは当然面倒でなので1つのファイルである場合と無い場合の両方に対応したい.
あと, 「git-prompt.sh の有無で PS1 に代入する値を変える」という手法は似たような事が増えた時にねずみ算的に記述が増えていくので PS1 もできれば固定させたい.
って事で自分は以下のように設定する事で対処している.
# Load Git Completions
gitps1="true"
GIT_CONTRIB_DIR=/opt/git/contrib
if [ -r ${GIT_CONTRIB_DIR}/completion/git-prompt.sh ]; then
. ${GIT_CONTRIB_DIR}/completion/git-prompt.sh
gitps1="__git_ps1"
fi
# Prompt
export PS1='\u@\h [\W $(${gitps1})] \$ '
ポイントとしては「直接 __git_ps1
を指定するのではなく,一度変数に格納してから $() の構文で呼び出す」ところ
bash には true コマンドというのが組み込まれていて,実行しても何も起こらない人畜無害なコマンドなので git-prompt.sh が無かった場合は何も表示されず,またエラーも起きないようになっている.
注意して欲しいのは GIT_CONTRIB_DIR
の値は人によって変わるという点.
OS というか パッケージマネージャー (yum, apt-get, brew, port等) によってどこにインストールされるか変わるので
GIT_CONTRIB_DIR
の値 と ${GIT_CONTRIB_DIR}/completion/git-prompt.sh
の部分は自分の設定に合わせて適宜変えて下さいな.
最近,自分は git に関してはソースコードから自前でコンパイルするようにしていたりするのでパッケージでインストールした場合,どこに設置されるかは正直知らなかったりする. (確か /usr/share/ とか /usr/etc とかにできたような気もするけど・・・)
今,yumでインストールしてた自分のCentOSのサーバーで確認したら /usr/share/doc/git-1.7.1
に contrib ディレクトリがあった.まぁそんな感じの場所にインストールされるはず.
多分下のコマンド叩けば見つかるんじゃないかな?
find /usr/share -name '*completion*' | grep git
find /usr/share -name '*contrib*' | grep git
逆に,ソースコードからコンパイルした場合は /usr/local/src/git
にソースを置いたと仮定すると
GIT_CONTRIB_DIR=/usr/local/src/git/contrib
となる.自分は /usr/local/src/git/contrib
とするのがなんだか格好悪いって理由だけで /opt/git/contrib
にシンボリックリンクを貼ってたりする←
とかなんとか行ってドヤ顔して終わろうと思ってたのに,調べたらバージョンとかによってロードのされ方が違ったりするみたい...
きちんと検証せな・・・